一組資料中只有一個數字出現了一次。 其他所有數字都是成對出現的。請找出這個數字。(使用位運算)
阿新 • • 發佈:2019-02-19
注意:若陣列總和為單數且執行兩兩匹配一定有單數
若陣列總和為雙數則先求最大奇陣列的單數與最後一個元素比較,若不同則有兩個單數,若相同則沒有單數
如{ 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
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