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

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

# include <stdio.h>
# include <windows.h>

void find_once(int arr[], int len)
{
    int i = 0;
    int j = 0;

    for (i = 0; i < len; i++)
    {
        int k = 0;
        for (j = 0; j < len; j++)
        {
            if (arr[j] == arr[i])
            {
                k++;
            }

        }
        if
(k == 1) { printf("重複出現的數:>%d ", arr[i]); } } printf("\n"); } void find_once2(int arr[], int sz) { int ret = 0; int inter = 0; int retA = 0; int retB = 0; int i = 0; for (i = 0; i < sz; i++) { ret ^= arr[i]; } /*找ret最右邊的1*/
inter = ret - (ret&(ret - 1)); for (i = 0; i < sz; i++) { int a = (arr[i] >> (inter - 1)) % 2; //取出arr[i]的第inter位 if (a == 0) { retA ^= arr[i]; } else { retB ^= arr[i]; } } printf("出現奇數次的兩個數為:> %d,%d\n"
, retA, retB); } int main() { int arr[] = { 1, 2, 2, 1, 3, 4, 5, 5, 4 , 6, 7, 7 }; int sz = sizeof(arr) / sizeof(arr[0]); find_once1(arr, sz); find_once2(arr, sz); system("pause"); return 0; }