作者loveme00835 (髮箍)
看板Soft_Job
標題Re: [請益] 程式小考題目
時間Tue Nov 22 21:13:11 2016
※ 引述《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