一個數組中只有兩個數字是出現一次, 其他所有數字都出現了兩次,找出這兩個數字
阿新 • • 發佈:2018-11-11
題目:一個數組中只有兩個數字是出現一次,
其他所有數字都出現了兩次。
找出這兩個數字,程式設計實現。
參考程式碼:
#include<stdio.h>
#include <windows.h>
void find_num(int arr[], int len)
{
int i = 0;//迴圈變數
int ret = 0;//記錄所有值異或的結果
int pos = 0;//記錄ret二進位制為第一個為1的位置
int x = 0;//將一組值異或在x,得到1個沒有相同數字的值
int y = 0;//將另一組值異或在x,得到另1個沒有相同數字的值
for (i = 0; i < len; i++)
{
ret ^= arr[i];
}//將陣列的所有值異或
for (i = 0; i < 32; i++)
{
if (1 == ((ret >> i) & 1))
{
pos = i;
break;
}
}//找到ret二進位制為第一個為1的位置
for (i = 0; i < len; i++)
{
if (1 == ((arr[i] >> pos) & 1))
{
x ^= arr[i];
}
else
y ^= arr[i];
}//分組異或
printf("x=%d,y=%d\n", x, y);
}
int main()
{
int arr[] = { 1, 2, 3, 1, 2, 3, 6, 5 };
int sz = sizeof(arr) / sizeof(arr[0]);
find_num(arr, sz);
system("pause");
return 0;
}
執行結果展示: