利用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