求數組中唯一重複的數字:
數組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);
}