nyoj-528-找球号(三)

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int n,x,ans;
 5     while(scanf("%d",&n)!=EOF)
 6     {
 7         ans = 0;
 8         while(n--)
 9         {
10             scanf("%d",&x);
11             ans ^= x;
12         }
13         printf("%d
",ans);
14     }
15     return 0;
16 }

我们先了解一下位异或的运算法则吧:

1、a^b = b^a。

2、(a^b)^c = a^(b^c)。

3、a^b^a = b。

对于一个任意一个数n,它有几个特殊的性质:

1、0^n = n。

2、n^n = 0。

所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。

原文地址:https://www.cnblogs.com/nylg-haozi/p/3184897.html