标签:结果 第一题 多少 blog 出现 diff 分组 span 一个
#include <stdio.h> #include <windows.h> int main() { int arr[]={1,2,3,4,5,1,2,3,4}; int i=0; int j=0; for(i=1;i<sizeof(arr)/sizeof(arr[0]);i++) { arr[0]=arr[0]^arr[i]; //将它们整体异或 } printf("the single is:%d\n",arr[0]); system("pause"); return 0; }
那如果是一组数据中有两个数字出现了一次。其他所有数字都是成对出现的。该如何找出这两个数字。(使用位运算)
#include <stdio.h> #include <windows.h> #include <assert.h> void find_diff_data(int arr[],int len) { assert(arr); assert(len>2); int i = 0; int value = arr[0]; for(i = 0;i < len;i++) { value ^= arr[i]; //整体异或 } int farg = 1; i = 0; while(i < 32) { if(value & (farg <<= i)) // 查找为1的比特位 { break; } i++; } i = 0; int data1 = 0; int data2 = 0; for(i = 0;i < len;i++) { if(arr[i] & farg) { data1 ^= arr[i]; } else { data2 ^= arr[i]; } } printf("%d %d",data1,data2); } int main() { int arr[] = {1,2,3,4,5,6,1,2,3,4}; int len = sizeof(arr)/sizeof(arr[0]); find_diff_data(arr,len); system("pause"); return 0; }
一组数组中只有一个数(两个数)出现一次,其他的都成对出现,找出该数
标签:结果 第一题 多少 blog 出现 diff 分组 span 一个
原文地址:http://www.cnblogs.com/xjq6898/p/7819745.html