Re: [請益] 程式小考題目
※ 引述《sam901002 (fxsh1301)》之銘言:
: 台中某私立科大程式小考
: 原PO朋友的老闆是教程式設計
: 對象是目前大一上的學生
: 今天他改完小考 想問這樣真的太難嗎?
: 作答前提:教到if else判斷式
: 還不會迴圈、陣列
: http://imgur.com/7baPsH9
: -----
: 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
推
11/22 21:25, , 1F
11/22 21:25, 1F
→
11/22 21:34, , 2F
11/22 21:34, 2F
→
11/22 21:46, , 3F
11/22 21:46, 3F
→
11/22 21:51, , 4F
11/22 21:51, 4F
→
11/22 21:56, , 5F
11/22 21:56, 5F
推
11/23 00:14, , 6F
11/23 00:14, 6F
推
11/23 09:42, , 7F
11/23 09:42, 7F
推
11/23 09:43, , 8F
11/23 09:43, 8F
推
11/23 10:44, , 9F
11/23 10:44, 9F
→
11/23 12:51, , 10F
11/23 12:51, 10F
→
11/23 12:54, , 11F
11/23 12:54, 11F
和小大一相比, 對學習過更多語言特性的我們來說,
如何用它們創造出更多元的解法, 我覺得也是富有挑戰的.
"只能用目前學過的語法來解這題"
一樣的題目和限制, 能不能從中挖出半點讓自己進步的空間
我想表達的是這個概念
※ 編輯: loveme00835 (180.176.51.36), 11/23/2016 13:56:49
推
11/23 15:10, , 12F
11/23 15:10, 12F
推
11/24 00:27, , 13F
11/24 00:27, 13F
推
11/24 11:59, , 14F
11/24 11:59, 14F
推
11/24 13:59, , 15F
11/24 13:59, 15F
推
11/24 15:31, , 16F
11/24 15:31, 16F
推
11/28 18:24, , 17F
11/28 18:24, 17F
→
12/02 12:40, , 18F
12/02 12:40, 18F
討論串 (同標題文章)