1. 程式人生 > >一組資料中只有一個數字出現了一次。 其他所有數字都是成對出現的。請找出這個數字。(使用位運算)

一組資料中只有一個數字出現了一次。 其他所有數字都是成對出現的。請找出這個數字。(使用位運算)

注意:若陣列總和為單數且執行兩兩匹配一定有單數

            若陣列總和為雙數則先求最大奇陣列的單數與最後一個元素比較,若不同則有兩個單數,若相同則沒有單數

    如{ 1, 3, 5, 7, 1, 3, 5}顯示單數為7 ;

     { 1, 3, 5, 7, 1, 3, 5,7}顯示沒有單數;

     { 1, 3, 5, 7, 1, 3, 5,8}顯示單數為7,8 。

#include<stdio.h>

 int main()

{

int a[] = { 1, 3, 5, 7, 1, 3, 5,7};

int i = 0;

int flag = 0;

int len = sizeof

(a) / sizeof(a[0]);

int count = 0;

if (!(len % 2))

{

flag++;

}

for (i = 1; i < len-flag; i++)

{

a[0] = a[0] ^ a[i];

}

if (a[0] == a[len-1])

{

printf("沒有單數\n");

count++;

}

if (!count)

{

if (flag)

{

printf("這個單數是:%d,%d\n", a[0], a[len - 1]);

}

else

printf("這個單數是:%d\n",a[0]);

}

return 0;

}

以下為執行異或的過程

find

a[i]    i=0,1,2...7。

0000

0001

0001

0011

0010

0101

0111

0111

0000

0001

0001

0011

0010

0101

0111

1000

返回值

1111