51Nod 2106 一个奇数次

基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
 收藏
 取消关注
输入一个长度为n的数组,考虑所有不同的数字,有且只有一个数字出现了奇数次。
比如对于1 2 3 1 2 3 1,我们考虑所有不同的数字1 2 3,有且只有1出现了奇数次(3次)
输出这个出现了奇数次的数字。
1 <= n <= 100000
1 <= a[i] <= 10^9
Input
第一行一个整数n,
接下来一行n个整数,表示输入的数字。
Output
一行一个数字,表示出现了奇数次的数字。
Input示例
7
1 2 3 1 2 3 1
Output示例

1


异或运算的基本性质

1. a ⊕ a = 0 ******
2. a ⊕ b = b ⊕ a
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.*****1和5可得,0异或一个数为这个数本身

因为只有一个数出现奇次,所以所有的数都异或即可。a异或a=0,0异或a=a;

所以所有的数异或出的结果,一定是要求的!!!


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int n,a=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int num;
        scanf("%d",&num);
        a^=num;
    }
    printf("%d\n",a);
    return 0;
}

阅读更多
文章标签: 异或运算
个人分类: 51-Nod
上一篇n的阶乘结果有几个0
下一篇简单搜索--棋盘问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭