xiaod现在正在某个球场负责网球的管理工作。为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是偶数。有一天,xiaod发现少了一个球,你能帮他找出丢的那个球的球号吗?
5 1 1 3 6 6 3 1 2 1
3 2
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 while(scanf("%d",&n)!=EOF) 7 { 8 int i,a,s=0; 9 for(i=0;i<n;i++) 10 { 11 scanf("%d",&a); 12 s ^= a; 13 } 14 printf("%d\n",s); 15 } 16 return 0; 17 } 18 //位运算--异或
位异或:
位异或的运算法则吧:
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。
所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。
ps:还可以用异或来交换变量
1 #include <stdio.h> 2 void swap(int &a,int &b) 3 { 4 a^=b; 5 b^=a; 6 a^=b; 7 } 8 int main() 9 { 10 int n,m; 11 while(scanf("%d%d",&n,&m)!=EOF) 12 { 13 swap(n,m); 14 printf("%d %d\n",n,m); 15 } 16 return 0; 17 }
nyoj_528_找球号(三)_201404152050,布布扣,bubuko.com
原文:http://www.cnblogs.com/xl1027515989/p/3667296.html