首页 > 其他 > 详细

找出一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的(使用位运算)

时间:2019-02-11 22:52:16      阅读:206      评论:0      收藏:0      [点我收藏+]

 要求使用位运算     
 异或运算:相同为0,不同为1,  a[]={1,2,5,6,8,8,1,2,6}
 1^x=-x , 0^x=x    b[]={1,1,2,2,5,6,6,8,8}
 举例a[]
 1: 0 0 0 1 
 2: 0 0 1 0    0011-->   1与2异或运算的结果 
 5: 0 1 0 1    0110-->   上面运算结果与5在运算的结果    
 6: 0 1 1 0    0000-->   依次类推                
 8: 1 0 0 0    1000  
 8: 1 0 0 0    0000    
 1: 0 0 0 1    0001    
 2: 0 0 1 0    0011    
 6: 0 1 1 0    0101

总结:(异或的结果和数的运算顺序无关,对应位的异或结果和对应位所有数中1的个数有关:偶数个1,结果为0,奇数个1,结果为1)

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a[11] = { 1,2,6,7,7,1,2,9,6,9,10 };
 5     int ret = 0;
 6     for (int i = 0;i < 11;++i)
 7     {
 8         ret ^= a[i];
 9     }
10     printf("%d\n",ret);
11 
12     return 0;
13 }

 

找出一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的(使用位运算)

原文:https://www.cnblogs.com/cuckoo-/p/10363428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!