我是编程新手。我正在学习XOR来尝试关于Kattis的奇怪的问题,以解决课堂作业问题。
我正在尝试的是在一系列数字中找到奇怪的人。保存一个的每个号码都有一对。我必须找到没有的数字。下面我的代码应该对数组中的每个数字进行异或,以找到"奇怪的人"。
但是,由于我不知道为什么XOR输出的答案不正确,我会在这个网站上发帖,寻求帮助。
我的意见是:
3
3
1 2147483647 2147483647
5
3 4 7 4 3
5
2 10 2 10 5
我的输出是:
Case #1: 3
Case #2: 4
Case #3: 4
我希望得到:
Case #1: 1
Case #2: 7
Case #3: 5
提前感谢您的帮助!
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
int N,i,n,j,a=0,num=1;
int guest[1000],cas[16];
scanf("%d",&N);
printf("N is: %d\n",N);
while(N!=0){
scanf("%d",&n);
j=0;
printf("n is: %d\n",n);
for(i=0;i<n;i++){
scanf("%d",&guest[i]);
j=j^i;
printf("guests are: %d\n",guest[i]);
}
printf("j is: %d\n",j);
cas[a]=j;
a++;
N--;
printf("N is: %d\n a is: %d\n",N,a);
}
for(i=0;i<a;i++){
printf("Case #%d: %d\n",num,cas[i]);
num++;
}
return 0;
}
答案 0 :(得分:1)
正如评论中提到的user3528438,您的第j=j^i;
行应为j=j^guest[i];
。您希望与您输入的数组的成员进行异或,而不是使用数组的索引。
您应该养成尽早评论代码的习惯,并将变量命名为使代码更易于阅读的内容。它可以更容易地捕获这样的错误,如果你以后必须回到你的代码,它会让你心痛。