Re: [問題] 條件式判斷

看板C_and_CPP作者 (猜猜偶素隨 ? ^*^)時間15年前 (2011/02/10 22:44), 編輯推噓4(404)
留言8則, 5人參與, 最新討論串5/8 (看更多)
※ 引述《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)

02/10 23:16, , 1F
漂亮. 另外, min() 是為了 100 分的 case 會變成 sc[5].
02/10 23:16, 1F

02/10 23:20, , 2F
小修正:i++要放後面. {}用分號就可以. grade必須是signed
02/10 23:20, 2F

02/10 23:33, , 3F
偷推 bit twiddling hacks
02/10 23:33, 3F

02/10 23:35, , 4F
XDDDD 被樓上發現了
02/10 23:35, 4F

02/10 23:42, , 5F
to 1F 對耶.好吧那我這樣max(min((grade-50)/10,100),0)
02/10 23:42, 5F

02/10 23:42, , 6F
硬是要不一樣 > "<
02/10 23:42, 6F

02/11 00:19, , 7F
小弟現在才發現 C 語言也很可怕....Q_Q~
02/11 00:19, 7F

02/11 09:51, , 8F
推(Y)
02/11 09:51, 8F
文章代碼(AID): #1DK_dg_Q (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DK_dg_Q (C_and_CPP)