1. 程式人生 > >一個數組中只有兩個數字是出現一次, 其他所有數字都出現了兩次,找出這兩個數字

一個數組中只有兩個數字是出現一次, 其他所有數字都出現了兩次,找出這兩個數字

題目:一個數組中只有兩個數字是出現一次,
其他所有數字都出現了兩次。
找出這兩個數字,程式設計實現。

參考程式碼

#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; }

執行結果展示
在這裡插入圖片描述