求数组中唯一重复的数字:
数组a[n],1至n-1存在a中,有一个是重复的,找出这个数字。
第一种方法:
#include<stdio.h>
int main(void)
{
int a[11]={1,2,3,4,5,6,7,7,8,9,10};
int i,sum=0,x;
for(i=0;i<11;i++)
{
sum+=a[i];
}
x=sum-( (1+10)*10 ) /2;//数组总和 减去1到10得和多出来的就是重复的
printf("%d\n",x);
}
第二种
用异或:异或运算满足交换律结合律,
设重复数字为A,其余N-2个数字疑惑结果为B,N个数字异或结果为:A^A^B,
1~N个数字异或结果为;A^B.
X^X=0.
0^X=1
所以;(A^B)^(A^A^B)=A^B^B=A
int main(void)
{
int a[11]={1,2,3,4,5,6,7,8,9,10,7};
int i,x1=0,x2=0;
for(i=0;i<11;i++)//数组所有元素 异或
{
x1^=a[i];
}
for(i=1;i<11;i++)//数组所有不重复的元素 异或
{
x2^=i;
}
printf("%d\n",x1^x2);
}