我想找到一個公式來描述這個系列。 我需要根據正整數設置一個布爾值。 這很簡單,但我卡住了,感覺有點愚蠢。如何在代碼中描述這個系列?
0 false
1 true
2 true
3 false
4 false
5 true
6 true
7 false
8 false
9 true
10 true
11 false
12 false
...
所以在每個奇數
我想找到一個公式來描述這個系列。 我需要根據正整數設置一個布爾值。 這很簡單,但我卡住了,感覺有點愚蠢。如何在代碼中描述這個系列?
0 false
1 true
2 true
3 false
4 false
5 true
6 true
7 false
8 false
9 true
10 true
11 false
12 false
...
所以在每個奇數
嘛標誌變化,爲旗在每個奇數改變,它看起來像你的布爾應該是真實的,當且僅當(n+3)%4 <= 1
,其中%
是模運算符:
n (n+3)%4 Boolean
-- ------- -------
0 3 false
1 0 true
2 1 true
3 2 false
4 3 false
5 0 true
6 1 true
7 2 false
8 3 false
9 0 true
10 1 true
11 2 false
12 3 false
:: : : :
我特意增加了三個,而不是減去一個,因爲某些語言有模運算符應爲負數做什麼不同的想法。請記住,這是與語言無關的。如果您專門尋找C或C語言解決方案,請參閱優秀答案here from Christoffer Hammarström((n + 1) & 2
以防萬一它消失) - 這在這些特定語言中要簡潔得多。
您可以先將int值除以2,然後檢查它是偶數還是奇數。
boolean flag = ((i+1)/2)%2!=0;
也許有一個錯誤的錯誤,所以檢查一下。
N (N+1)/2 ((N+1)/2)%2 compare != 0
0 0 0 false
1 1 1 true
2 1 1 true
3 2 0 false
4 2 0 false
5 3 1 true
6 3 1 true
7 4 0 false
8 4 0 false
9 5 1 true
...
在每個奇數標誌的變化,意味着最後一個比特設置爲1。
1 => 01,3 => 11,... 9 => 1001,11 => 1011 等等.. 所以,你可以檢查每一步的最後一位,每當它是1時,翻轉標誌。
'(n + 1)&2'似乎更簡單,不是嗎? – 2010-04-14 09:44:50
其實這是一個很好的答案。我更喜歡數學方面的知識,因爲沒有指定語言,但對C和它的弟兄來說這確實相當不錯。我懷疑他們可能會根據現在聰明的編譯器如何優化到同樣的東西(但我無法確定)。 – paxdiablo 2010-04-14 11:36:20