1.这组数据中只有一个数字出现了一次,其他的数字都是成对出现。
我们先来想一想异或(^).
a^b (1)a=b时,a ^ b=0. (2)a!=b时,a ^ b=1.
基于以上的知识,我们是不是可以把这组数据依次异或呢?我们来看一下:
假设arr[5]={1,2,3,2,1};
我们取数组中第一个元素1,让他依次与数组中的元素(二进制)异或。
0001(1) ^ 0010(2) = 0011
0011 ^ 0011(3) = 0000
0000 ^ 0010(2) = 0010
0010 ^ 0001(1) = 0011(3)
我们发现,最后的结果0011就是我们数组中单独出现的3.
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int findsinglenum(int arr[], int len)
{
int i = 0;
int ret = arr[0];
for (i = 1; i < len; i++){
ret = ret ^ arr[i];
}
return ret;
}
int main()
{
int arr[100] = {
0 };
int i = 0;
printf("请输入你要输入的数据的个数:");
scanf("%d", &n);
printf("请输入一组数据:");
for (i = 0; i < n; i++){
scanf("%d",