MasMas在面试某大厂时遇到了一道有趣的题。
面试官要求MasMas写一个程序找出几个数中,出现次数为奇数的那个数。
MasMas抓耳挠腮,请你帮帮他。
第一行输入一个数nn (1 \leq n \leq 10^7 ,n\mod\ 2\ =\ 1 )(1≤n≤107,nmod 2 = 1)
接下来nn个整数ii (ii在 intint 范围内 ),保证只有一个数出现奇数.
输出出现次数为奇数的数
5
1 1 2 3 3
2
1 出现 2次
2 出现 1次
3 出现 2次
所以输出22
1 #include<bits/stdc++.h>
2 using namespace std;
3 int ans,n,x;
4 int main()
5 {
6 scanf("%d",&n);
7 for(int i=1;i<=n;i++) scanf("%d",&x),ans^=x;
8 cout<<ans<<endl;
9 return 0;
10 }
题目中说了,偶数次,只有一个是奇数次。那么通过异或操作可以解决。
a^b
1.如果a,b相同,那么最后得到0
2.如果a=0,那么最后得到本身
所以所有偶数次,最后都得到0,那么到最后剩下唯一的一个异或0,得到本身。故该题得解。
原文:https://www.cnblogs.com/Astronaut0142/p/14851844.html