题目链接
题目背景
GHGHGH是一位特工,他收到了一系列数字表示某地区地雷的埋雷和爆炸情况。
题目描述
这一系列信息一共有nnn个数字,每个地雷每个地雷都有自己的编号,当这个编号第一次出现时代表这颗地雷被埋下,当第二次出现时代表这颗地雷被引爆了。比如 3 4 3 1 4表示最终只剩下一号地雷,且已知最终只有一颗地雷剩下,GHGHGH很聪明,但因为nnn很大他也懒得算,他想设计一个程序找出最后哪颗地雷剩余。(每颗地雷一定出现两次,其中只有一颗地雷出现一次)
输入输出格式
输入格式:
第一行一个数nnn表示出现的数字个数 第二行nnn个数表示地雷埋雷和引爆情况
输出格式:
输出最终剩下的那颗地雷
输入样例1:
5 1 2 2 1 3
输出样例1:
3
输入样例2:
7 3 4 2147483647 4 1 1 3
输出样例2:
2147483647
思路:
由于数据保证了除了答案以外每个数都会出现两次。所以根据异或(对于两个二进制数a和b的每一位,如果该位上数字不同,则返回1,如果该位上数字相同,则返回0。如果长度不够则补前导0)的运算原则(一个数对任何一个数异或偶数次之后不变),所以直接异或就好啦!
代码:
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,m,ans; int main() { n=read(); for(register int i=1;i<=n;++i) { m=read(); ans=ans^m; } printf("%d",ans); return 0; }