2010-04-14 53 views
1

我想找到一個公式來描述這個系列。 我需要根據正整數設置一個布爾值。 這很簡單,但我卡住了,感覺有點愚蠢。如何在代碼中描述這個系列?

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 
... 

所以在每個奇數

回答

5

嘛標誌變化,爲旗在每個奇數改變,它看起來像你的布爾應該是真實的,當且僅當(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以防萬一它消失) - 這在這些特定語言中要簡潔得多。

+0

'(n + 1)&2'似乎更簡單,不是嗎? – 2010-04-14 09:44:50

+0

其實這是一個很好的答案。我更喜歡數學方面的知識,因爲沒有指定語言,但對C和它的弟兄來說這確實相當不錯。我懷疑他們可能會根據現在聰明的編譯器如何優化到同樣的東西(但我無法確定)。 – paxdiablo 2010-04-14 11:36:20

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 
... 
0

在每個奇數標誌的變化,意味着最後一個比特設置爲1。

1 => 01,3 => 11,... 9 => 1001,11 => 1011 等等.. 所以,你可以檢查每一步的最後一位,每當它是1時,翻轉標誌。

3

在C和其他語言中,非零值爲真:(n + 1) & 2和其他語言:(n + 1) & 2 != 0

+1

靈活+1。 – paxdiablo 2010-04-14 11:42:31