C語言程式設計 找出數列中只出現一次的兩個數

2021-10-09 21:50:18 字數 1152 閱讀 5303

原題:

乙個陣列中只有兩個數字是出現一次,其他所有數字都出現了兩次。

找出這兩個只出現一次的數字,程式設計實現。

此題要用到在數列中找出只出現一次的乙個數字的方法

參考此題明顯無法一次性將兩個數都找出,所以需要將數列分為兩部分,每一部分有乙個只出現一次的數,那麼此時需要的就是分離數列的條件。

沿用找出乙個數時的思想,將數列進行相互異或,但這次所得的值不是只出現一次的那個數了,因為只出現一次的數有兩個,所以此次計算得到的是只出現一次的兩個數的異或值。

在得到這個值後進行分析,假如得到值是4,二進位製碼是0100

參照異或的定義,0代表此位兩個數的值相同,1代表此位兩個數的值不同。

eg:只出現一次的兩個數是2和6

2的二進位製碼是

0010

6的是0110

計算得到的值(兩個數異或)就是0100,表示第三個二進位制位兩個數不同

得到了此條件,就可以將數列分為第三個二進位制位為1第三個二進位制位為0兩個數列

再將每個數列採用找出乙個數字的方法找出數字即可。

源**:

#define _crt_secure_no_warnings 1

#include#includeint find1(int a,int length)

return result;

}void find2(int result,int a, int length, int *k1, int *k2)

for (j = 0; j < length; j++)

if (((a[j] >> i) & 1 )== 0)

}}int main()

; int length = sizeof(arr) / sizeof(arr[0]);

int num1=0, num2=0;

int * k1 = &num1, * k2 = &num2;

find2(find1(arr, length), arr, length, k1, k2);

printf("%d %d\n",num1,num2);

system("pause");

return 0;

}

找出只出現一次的整數

問題 乙個整數陣列中每個數均出現三次,只有乙個數隻出現一次。找出這個數。解析 如果這裡的數不是出現三次而是出現兩次,我們可以使用異或的方式將所有的數進行異或,最後的結果自然是僅出現一次的數。受此啟發,這裡考慮將整數表達成3 進製,每一位的異或操作 1 xo 0 1 2 xo 0 2 0 xo 0 0...

找出陣列中只出現一次的數字

乙個整型陣列裡除了乙個數字以外,其他數字都出現了兩次。找出這個只出現一次的數字 異或運算 任何乙個數字異或它本身都等於0,如果從頭到尾異或陣列中的每乙個數字,那些出現兩次的數字全部在異或中會被抵消,最終的結果剛好是這個只出現一次的數字 package jbarray 找出陣列中只出現一次的數字 au...

找出陣列中只出現一次的數

今天來看一道有意思的題,看起來很簡單,但是要想到滿足要求的答案沒那麼容易。有乙個非空整形陣列,除了有乙個只出現過一次的數,其他的數都出現且只出現過兩次,現要求找出這個只出現過一次的數。時間複雜度不能超過 o n 而且不能使用額外空間。大概意思就是,比如從 5,5,8,8,6,9,9 陣列中找出 6 ...