如何在代码中描述这个系列?
问题描述:
我想找到一个公式来描述这个系列。 我需要根据正整数设置一个布尔值。 这很简单,但我卡住了,感觉有点愚蠢。如何在代码中描述这个系列?
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