看板 Soft_Job 關於我們 聯絡資訊
※ 引述《sam901002 (fxsh1301)》之銘言: : 台中某私立科大程式小考 : 原PO朋友的老闆是教程式設計 : 對象是目前大一上的學生 : 今天他改完小考 想問這樣真的太難嗎? : 作答前提:教到if else判斷式 : 還不會迴圈、陣列 : http://imgur.com/7baPsH9 : http://imgur.com/JE4NSo1 : ----- : Sent from JPTT on my HTC_M9px. "只能用目前學過的語法來解這題" 對新鮮人來說這個條件稍微難了點, 對小弟我來說更難 xD 分享一下解題過程, 望大大們勿噴 舉個例子, 就題目 Q1、Q2 來看, 已知的常數不只有基底(2、10)、 輸入的最大(255、9999999)、分隔符號("_"、"###"), 還有更重要 的輸出位數(8、7) 把 Q1 輸出部分的程式碼簡單寫出來如下: printf( "%d" "_" "%d" "_" "%d" "_" "%d" "_" "%d" 8 "_" "%d" "_" "%d" "_" "%d", 1, → 134 / 2^7 % 2 0, → 134 / 2^6 % 2 0, → 134 / 2^5 % 2 0, → 134 / 2^4 % 2 8 0, → 134 / 2^3 % 2 1, → 134 / 2^2 % 2 1, → 134 / 2^1 % 2 0 → 134 / 2^0 % 2 ); 從上面可以看到輸入的最大值在打印的時候是起不到作用的, 而且 複的程式碼不少, 希望能改寫成更簡單的形式如下: printf( repeat "%d" 8 times and concatenate them by "_", list 8 digits of 134 in binary notation ); 其實 C 語言裡的巨集(macro)就可以處理這種雜事, 最後程式碼變成: printf( PP_JOIN_REPEAT("%d", "_", 8), PP_EXPAND_DIGITS(134, 2, 8) ); 原始碼: http://ideone.com/rHW20w 剩下就是編譯器的事了.. (煙 更進階還可以改成對數版本, 連位數都不用先算好 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.51.36 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1479820396.A.627.html
shadow0326: 助教會哭吧 11/22 21:25
Caesar08: !!! 11/22 21:34
ACMANIAC: 笑了,這 code 11/22 21:46
nnkkman: 想說這id好熟悉,原來是前c&c++板主 11/22 21:51
loveme00835: @shadow0326 哭出來先給 60! 11/22 21:56
coal511464: 給推 11/23 00:14
laxersnine: 笑了xDD 11/23 09:42
sorryla: 別欺負助教R 11/23 09:43
Ekmund: 最好會用macro啦 =皿= 11/23 10:44
lucky1lk: 別欺負我=皿= 11/23 12:51
cha122977: macro應該還沒教吧XD 11/23 12:54
和小大一相比, 對學習過更多語言特性的我們來說, 如何用它們創造出更多元的解法, 我覺得也是富有挑戰的. "只能用目前學過的語法來解這題" 一樣的題目和限制, 能不能從中挖出半點讓自己進步的空間 我想表達的是這個概念 ※ 編輯: loveme00835 (180.176.51.36), 11/23/2016 13:56:49
stosto: Q1我真的覺得暴力法就夠了,超過就例外排除 只是這C太高深 11/23 15:10
keyut2433: 我到底看了什麼東西阿.... 11/24 00:27
Sidney0503: XDDDDDDDD 11/24 11:59
Vick753: 太猛了 11/24 13:59
Fkym08: 跪了QQ 11/24 15:31
FukadaKyoko: 神煩XD 11/28 18:24
ronin728: WTF XDDDDD 12/02 12:40