我在一次招聘比赛中遇到了这个问题(现在已经结束了)。具体如下:
给定两个自然数N和X。你需要创建一个由N个自然数组成的数组,使得这些数字的位异或等于X。可用的自然数的总和应尽可能地小。
如果存在多个数组,则输出最小的一个。
如果A[i] < B[i]并且A[i]=B[i]对于所有小于i的索引,则Array A< Array B
示例输入: N=3, X=2
示例输出 : 1 1 2
说明: 我们必须打印出三个自然数,使其总和最小。因此N空间数字是[1 1 2]
我的方法是: 如果N是奇数,我将N-1个1放入数组中(使它们的异或为零),然后再放入X
如果N是偶数,我再次放入N-1个1,然后将X-1(如果X是奇数)和X+1(如果X是偶数)放入数组中
但是这种算法在大多数测试用例中都不成功。例如,当N=4且X=6时,我的输出为
1 1 1 7
,但正确答案应该是1 1 2 4
有人知道怎样使数组的总和最小吗?
X-1
或X+1
而不是X
?另外,请确保允许零。 - Nico Schertler