作者Anonymoux (猜猜偶素隨 ? ^*^)
看板C_and_CPP
標題Re: [問題] 條件式判斷
時間Thu Feb 10 22:44:56 2011
※ 引述《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