#include<stdio.h>
#include<stdlib.h>
int func(int* arr, int sz){
int i = 0;
int temp=0;
int pet = 0;
int x=0, y=0;
for (i = 0; i < sz; i++){
temp = temp^arr[i]; // 将所有的数据异或
} //得到异或后的值temp
for (i = 0; i < 32; i++){ //将temp按二进制左移后
if (((temp >> i) & 1) == 1){ //与1做‘与’操作,当‘与’
pet = i; // 的值为1,则证明两个值不同,以便分组
break;
}
}
for (i = 0; i < sz; i++){
if (((arr[i]>>pet) & 1) == 1){ //根据与1后的值分两组
x = x^arr[i]; //第一组异或
}
else{
y = y^arr[i]; // 第二组异或
}
}
printf("x=%d y=%d\n", x, y);
return 0;
}
int main(){
int arr[] = { 2,3,4,2,3,4,57,48 };
int sz = sizeof(arr) / sizeof(arr[0]);
func(arr, sz);
system("pause");
return 0;
}
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。
猜你喜欢
转载自blog.csdn.net/weixin_43755544/article/details/86766318
今日推荐
周排行