求數組中唯一重複的數字

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

 } 
發佈了97 篇原創文章 · 獲贊 440 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章