#2: 驚!?利用位元運算,毋需任何 if-else


nevikw39 ($\mathscr{nevikw}\pmb{39}\in\m...)

學校 : 一中
編號 : 4
來源 : [140.114.207.96]
最後登入時間 :
2023-02-14 20:37:38
b015. 數字的顏色 -- 臺中一中電腦資訊研習社 | From: [106.107.176.158] | 發表日期 : 2019-11-01 00:29

大家安安,

我沒有很討厭 if-else 喇,只是喜歡盡量減少用量

這題要求多個條件的合併,首先我們發現主要基於三個條件:是否為 2 的倍數、是否為 3 的倍數、是否為 7 的倍數.再看看結果,剛好也是 23 種耶,太巧惹吧

所以,我們可以想到將一個整數 flag 以二進位制來操作,由不同位元記錄不同條件,用最低位元的 0 或 1 來表示其是否為 2 的倍數,以此類推:

...
White
Red
Yellow
Orange
Blue
Purple
Green
Black
201010101
300110011
700001111

至於為 5 的倍數之情況,就直接把三個位元都設成 1 即可.

flag 大概長這樣: !(n % 2) | !(n % 3) << 1 | !(n % 7) << 2 | !(n % 5) * 7

然後準備一個字串陣列,以 flag 為下標取值輸出.

謝謝大家

 
ZeroJudge Forum