看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《iamlouis (2塊錢立頓紅茶包)》之銘言: : ※ 引述《doggingg (doggingg)》之銘言: : : There are 4 tests for 10 students with grade ranges as: : : A:(grade>=90) : : B:(90>grade>=80) : : C:(80>grade>=70) : : D:(70>grade>=60) : : E:(grade<60) : : write a nested loop to count the number of grades, : : eg. 10'A's , 15'B's,etc and put the results into sc[5] : : (you can not use if statement) : : 題目是說10個同學每人有四個成績共40個成績,計算A等級幾個,B等級幾個 : : 把這五個等級的個數放進sc陣列中, : : 我想請教的是,不用if寫,要怎麼寫,是用switch嗎? 還是?: : for (i = 0; i < 10; i++) { : sc[min(4, max(0, (grade[i] - 50) / 10))))]++; : } : 利用 min(X, max(Y, ...)), 可以結果約束在 X 與 Y 之間. :-) 這個好 ... 改良一下 引用下列函數 const int CHAR_BIT = 8; #define min(x,y) y + ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); // min(x, y) #define max(x,y) x - ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))); // max(x, y) 因為沒有限定 A~E 在 sc中的順序 故 min 可略 for (i = 0; i < 10; i++, sc[max((grade[i] - 50) / 10), 0)]++) {} -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.119.163 ※ 編輯: Anonymoux 來自: 123.204.119.163 (02/10 22:49) ※ 編輯: Anonymoux 來自: 123.204.119.163 (02/10 22:53)
iamlouis:漂亮. 另外, min() 是為了 100 分的 case 會變成 sc[5]. 02/10 23:16
iamlouis:小修正:i++要放後面. {}用分號就可以. grade必須是signed 02/10 23:20
ilway25:偷推 bit twiddling hacks 02/10 23:33
Anonymoux:XDDDD 被樓上發現了 02/10 23:35
Anonymoux:to 1F 對耶.好吧那我這樣max(min((grade-50)/10,100),0) 02/10 23:42
Anonymoux:硬是要不一樣 > "< 02/10 23:42
VictorTom:小弟現在才發現 C 語言也很可怕....Q_Q~ 02/11 00:19
cutecpu:推(Y) 02/11 09:51