C - 异或循环 - Kattis - Oddmanout
C - XOR Loop - Kattis - Oddmanout
我是编程新手。我正在学习 XOR 以尝试在 Kattis 上解决课堂作业问题的 oddmanout 问题。
我正在尝试的是在一系列数字中找到奇怪的人。除一个号码外,每个号码都有一对。我必须找到没有的号码。我下面的代码应该对数组中的每个数字进行异或运算以找到 "odd man".
但是,由于我不知道为什么 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;
}
正如 user3528438 在评论中提到的,您的行 j=j^i;
应该是 j=j^guest[i];
。您想与您输入的数组成员进行异或运算,而不是与数组的索引进行异或运算。
您应该养成尽早注释代码的习惯,并为变量命名以使代码更易于阅读。它可以更容易地发现这样的错误,并且如果您稍后必须返回到您的代码,也会省去您的心痛。
我是编程新手。我正在学习 XOR 以尝试在 Kattis 上解决课堂作业问题的 oddmanout 问题。
我正在尝试的是在一系列数字中找到奇怪的人。除一个号码外,每个号码都有一对。我必须找到没有的号码。我下面的代码应该对数组中的每个数字进行异或运算以找到 "odd man".
但是,由于我不知道为什么 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;
}
正如 user3528438 在评论中提到的,您的行 j=j^i;
应该是 j=j^guest[i];
。您想与您输入的数组成员进行异或运算,而不是与数组的索引进行异或运算。
您应该养成尽早注释代码的习惯,并为变量命名以使代码更易于阅读。它可以更容易地发现这样的错误,并且如果您稍后必须返回到您的代码,也会省去您的心痛。