一个数组中只有两个数字是出现一次,其他所有数字都出现了两次

109 篇文章 0 订阅
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
#pragma warning(disable:4996)
# include <stdio.h>
void find( int * src,int x)
{
    int *mark = src; //元素位置
    int *set = src; // 浮动指针
    int out = x;
    int in = x;
    while (out--) //外层元素循环
    {
        set = src;//浮动归位
        in = x;  //位次查询结束,循环次数初始化
        while (in--) //内层浮标循环
        {
            if ((mark != set) && (0 == (*mark ^ *(set)))) 
             //不和自己异或 且 异或结果为 0,则该元素出现两次 ,跳过
            {
                mark++;
                break;
            }
            else //若异或不为0 ,浮动指针加一
            {
                set++;
            }
        }
        if (0 > in)  //当内部循环正常结束时,x次循环结束都没有找到出现两次的值,
                    //即 *mark 只出现了一次,此时,in--到了 -1,作为鉴别条件
        {
            printf("%d\n", *mark);
            mark++; //继续查找下一个元素
        }
    }
}
int main()
{
    int num[] = { 1, 2, 3, 4, 4,7, 1, 3, 2 ,8};
    find(num,sizeof(num)/sizeof(num[0]));
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值