问题如下--->
1.编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
分析思路:一个数字异或两次就等于没有异或,最后剩下的那个数字就是单个出现的数字。看程序吧--->
#include<stdio.h>
#include<stdlib.h>
int main(){
int i = 0;
int arr[] = { 1, 3, 1, 2, 3, 2, 4 };
int sum = 0;
int a = arr[0];
for (i = 1; i < sizeof(arr) / sizeof(arr[0]); ++i){
a = (a^arr[i]);
}
printf("%d\n", a);
system("pause");
return 0;
}
2. 一个数组中只有两个数字是出现了一次,其他所有数字都出现了两次,找出这两个数字,编写程序。
分析思路:这个题难度上升,可是没有实际意义。直接上程序吧--->
#include<stdio.h>
#include<stdlib.h>
int main(){
int i = 0;
int ret = 0;
int sum = 0;
int arr[] = { 1, 2, 5, 6, 7, 4, 6, 5, 2, 1 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
for (i = 0; i < sz; ++i){
ret ^= arr[i];
}
for (i = 0; i < 32; ++i){
if (((ret >> 1) & 1) == 1){
sum = i;
break;
}
}
for (i = 0; i < sz; ++i){
if (((arr[i] >> sum) & 1) == 1){
num1 ^= arr[i];
}
}
num2 = num1^ret;
printf("num1=%d\nnum2=%d\n", num1, num2);
system("pause");
return 0;
}
~bye~