编程之美-----在一个整型数组里找出只出现过一次的那两个数
#include <iostream> using namespace std; int main() { int T; int n,m; while(cin>>T,T){ cin>>n; while(--T){ cin>>m; n=m^n; } printf("%d\n",n); } return 0; }
http://www.cnblogs.com/youxin/p/3349834.html
//Test Case : int s[10]={1,2,1,3,5,3,4,6,5,6}; //函数功能 : 找出数组中两个只出现一次的数字 //函数参数 : arr为源数组,len为数组元素个数,result用来存放结果 //返回值 : 无 void FindIsolateTwo(int *arr, int len,int *result) { //int len = sizeof(arr)/sizeof(arr[0]); result[0] = result[1] = 0; int i, all = 0, flag = 1; for(i = 0; i < len ; i++) //所有数异或 all ^= arr[i]; while(!(all&flag)) //寻找过滤位;(all&flag)非0就跳出 flag <<= 1; for(i = 0; i < len; i++) //利用过滤位区分 { if(flag&arr[i]) result[0] ^= arr[i]; else result[1] ^= arr[i]; } }
扩展2:
数组中有三个数只出现一次,其它的数恰好出现两次,找出这三个数
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。