求数组中唯一重复的数字

求数组中唯一重复的数字:
数组a[n],1至n-1存在a中,有一个是重复的,找出这个数字。

第一种方法:
#include<stdio.h>
int main(void)
{
    int a[11]={1,2,3,4,5,6,7,7,8,9,10};
    int i,sum=0,x;
    for(i=0;i<11;i++)
    { 
        sum+=a[i];
    }
    x=sum-( (1+10)*10 ) /2;//数组总和 减去1到10得和多出来的就是重复的 
    printf("%d\n",x);

 } 

第二种
用异或:异或运算满足交换律结合律,
设重复数字为A,其余N-2个数字疑惑结果为B,N个数字异或结果为:A^A^B,
1~N个数字异或结果为;A^B.
X^X=0.
0^X=1
所以;(A^B)^(A^A^B)=A^B^B=A

int main(void)
{
    int a[11]={1,2,3,4,5,6,7,8,9,10,7};
    int i,x1=0,x2=0;
    for(i=0;i<11;i++)//数组所有元素 异或 
    { 
        x1^=a[i];

    }   
    for(i=1;i<11;i++)//数组所有不重复的元素 异或 
    { 
        x2^=i;

    }   

    printf("%d\n",x1^x2);

 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值