我的想法是这个数组先异或一遍,在和1~n异或一遍,结果放到变量xor里,然后创建两个循环,如果xor^i^j为零,那么i和j就是缺少的数字,但是却不行,这是为什么
package yuangong;
public class FindTwoOfNNumbers {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] digit={
1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,
18,19,20,31,32,33,34,35,36,37,38,39,40,
51,52,53,54,55,56,57,58,59,60,21,22,23,
24,25,26,27,28,29,30,41,42,43,44,45,46,
47,48,49,50,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,79,80,81,82,
83,84,85,86,87,88,89};//1~90缺少11,90
int n=digit.length;
int xor=0;
for(int i=0;i<n;i++){
xor=xor^digit[i]^(i+1);
}
xor=xor^(n+1)^(n+2);
int XOR;
for(int i=1;i<=n+2;i++){
for(int j=1;j<=n+2;j++){
XOR=xor^i^j;
if((XOR)==0){
System.out.println(i+" "+j);
break;
}
}
}
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] digit={
1,2,3,4,5,6,7,8,9,10,
13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27};//1~90缺少11,90
int num = 0;
for (int i = 0; i < 30; i ++) {
// num >= digit.length 是因为如果缺少像 30 这种的话,就会有问题
// num 的作用就是 digit 的偏移,因为要保证 i + 1 和 digit[num] 对得上
if (num >= digit.length || digit[num] != i + 1) {
System.out.println((i + 1));
} else {
num ++;
}
}
}
说错了,没有看懂题目,但是为什么不行是因为如果一个数只重复了两次,那么它就被消掉了,你就会以为它本来就没有
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632