MasMas在面试某大厂时遇到了一道有趣的题。
面试官要求MasMas写一个程序找出几个数中,出现次数为奇数的那个数。
MasMas抓耳挠腮,请你帮帮他。
第一行输入一个数nn (1 \leq n \leq 10^7 ,n\mod\ 2\ =\ 1 )(1≤n≤107,nmod 2 = 1)
接下来nn个整数ii (ii在 intint 范围内 ),保证只有一个数出现奇数.
输出出现次数为奇数的数
51 1 2 3 321    出现    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