计算序列1,2,3,4,5 ...(最多为n)的子集数,使得子集中所有元素的XOR为奇数。
例如: 对于序列1,2,3。
答案是:4
(1},{3},{1,2},{3,2}
答案 0 :(得分:1)
子集应包含奇数个奇数,因为您只关心最后一位,例如:
1 2 3 4 5
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
{1} {3} {5} - cause those have '1' as last bit itself.
上面的子集以及偶数的任意组合:
{1,2,4} {1,2} {1,4} {3,2,4}... so another 9 subsets
{1,3,5} is an odd also.
and variation with even numbers: {1,3,5,2} {1,3,5,4} {1,3,5,2,4 }
所以答案是16。 它与c ++无关。
你必须按顺序计算偶数的所有可能组合(使用组合,顺序无关紧要)+ 1(当使用零偶数时)。计算所有可能的奇数序列(顺序无关紧要)。乘以结果。
1 2 3 4 5
{2} {4} {2,4} {} = 4 options
{1} {3} {5} {1,3,5} = 4 options
4*4 = 16
答案 1 :(得分:1)
如果设置了最后一位,则数字为奇数。我们可以使用以下观察结果:
首先将数字分成偶数和奇数。显然,会有e=floor(n/2)
个偶数和o=n-e
个奇数。
偶数的选择不会影响结果的奇怪性。因此,您可以使用任何组合。有n_e = 2^e
个这样的组合(其中^
是权力运算符。)
从剩余的奇数中,你必须选择一个奇数。组合数为n_o = 2^(o-1)
。
总的来说,您有n_e * n_e = 2^e * 2^(o-1) = 2^(e + o - 1) = 2^(n - 1)
种组合。
答案 2 :(得分:0)
首先,我们知道所有偶数以0(按位)结束,所有奇数以1
结束所以这意味着只有奇数XOR偶数会给我们一个奇数。
考虑使用m
偶数和n
奇数
由于XOR是可交换和关联的,因此XOR的顺序并不重要,我们可以观察到以下内容:
我们需要奇数个奇数(至少需要一个,当相互异或时它们会给我们一个奇数)
偶数的数量对答案没有影响(我们可以选择任意数量的偶数,甚至0,当相互异或时它们会给我们一个偶数)
结合1和2,当整个集合XOR时,我们将得到一个奇数。
现在,有多少种组合?
让m
为总偶数,n
为奇数总数
对于1,有M = mC1 + mC3 + mC5... = 2^(m-1)
个选项
对于2,有N = nC0 + nC1 + ... = 2^n
个选项
答案是M*N = 2^(m+n-1)
请注意,m+n
=您的整数范围,因此可以进一步简化为2^(size-1)
例如:{1,2,3,4,5}:m = 2,n = 3,所以答案是2 ^ 4 = 16