您的位置:首页 > 其它

找出数组中只出现一次的元素

2016-12-05 21:50 141 查看
 
#include<stdio.h>
int find(int arr[],int sz)
{
int i=0;
int ret=0;
for(i=0; i<sz; i++)
{
ret^=arr[i];
}
return ret;
}
int main()
{
int arr[]={1,2,3,4,5,1,2,3,4};
int sz=0;
int ret=arr[0];
sz=sizeof(arr)/sizeof(arr[0]);
ret=find(arr,sz);
printf("%d\n",ret);
system("pause");
return 0;
}

在这里我们主要运用异或运算,那么首先就得了解异或运算

异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。其运算法则为a异或b=a'b或ab'(a'为非a)。真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。简单点说就是异或的两个值'相同为假,不同为真'。异或运算法则

1. a ^ b = b ^ a

 2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;

3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.

4. a ^ b ^ a = b.

根据以上法则我们可以推广到更多的数进行异或,对于程序中的数据,可以看成 1^2^3^4^5^1^2^3^4,然后根据交换法则可以变为1^1^2^2^3^3^4^4^5,两两相同的异或为0,0和任何数异或就是它本身,所以就可以找出单独出现一个的元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐