C - XOR循环 - Kattis - Oddmanout

时间:2016-02-27 23:39:03

标签: c loops xor

我是编程新手。我正在学习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;
}

1 个答案:

答案 0 :(得分:1)

正如评论中提到的user3528438,您的第j=j^i;行应为j=j^guest[i];。您希望与您输入的数组的成员进行异或,而不是使用数组的索引。

您应该养成尽早评论代码的习惯,并将变量命名为使代码更易于阅读的内容。它可以更容易地捕获这样的错误,如果你以后必须回到你的代码,它会让你心痛。