大家安安,
我沒有很討厭 if-else 喇,只是喜歡盡量減少用量
這題要求多個條件的合併,首先我們發現主要基於三個條件:是否為 2 的倍數、是否為 3 的倍數、是否為 7 的倍數.再看看結果,剛好也是 23 種耶,太巧惹吧
所以,我們可以想到將一個整數 flag 以二進位制來操作,由不同位元記錄不同條件,用最低位元的 0 或 1 來表示其是否為 2 的倍數,以此類推:
... |
White |
Red |
Yellow |
Orange |
Blue |
Purple |
Green |
Black |
2 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
3 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
7 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
至於為 5 的倍數之情況,就直接把三個位元都設成 1 即可.
flag 大概長這樣: !(n % 2) | !(n % 3) << 1 | !(n % 7) << 2 | !(n % 5) * 7
然後準備一個字串陣列,以 flag 為下標取值輸出.
謝謝大家