利用C語言找出只出現一次的數


給定一個非空整型數組,除了某個元素只出現一次以外,其余每個元素均出現兩次,找出那個只出現了一次的元素。

樣例: int a[]={1,2,3,4,5,1,2,3,4},該數組中只有5出現一次,其他數字都是成對出現的,要找出5。

思路一:統記每個元素在數組中出現的次數,最后次數為1的那個元素就是要找的數。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int arr[]={1,2,3,4,5,1,2,3,4};
    //找出只出現一次的元素
    int sz = 0;
    int i = 0;
    sz = sizeof(arr)/sizeof(arr[0]);
    for(i = 0; i < sz; i++ )
    {
        //統計arr[i]在數組中出現的次數
        int j;
        int count = 0;//計數
        for(j = 0;j < sz; j++)
        {
            if(arr[j]==arr[i])
            {
                count=count+1;
            }
        }
        if(count == 1)
        {
            printf("只出現一次的數是%d\n",arr[i]);
            break;
        }
    }

    system("pause");
    return 0;
}

思路二:引入異或運算,通過異或運算滿足交換律,可實現此要求

數a 數b 數c 結果
0^5 000 101 101
5^5 101 101 000
5^1 ^5 101 001 101 001
5^5 ^1 101 101 001 001

代碼如下

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int arr[]={1,2,3,4,5,1,2,3,4};
    //找出只出現一次的元素
    int sz = 0;
    int i = 0;
    int ret = 0;
    sz = sizeof(arr)/sizeof(arr[0]);
    for(i = 0; i < sz; i++ )
    {
        ret = ret^arr[i];
    }
    printf("只出現一次的數是:%d\n",ret);
    system("pause");
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM