首页 > 其他 > 详细

SYCOJ411

时间:2021-06-05 11:19:54      阅读:14      评论:0      收藏:0      [点我收藏+]

题面描述

MasMas在面试某大厂时遇到了一道有趣的题。
面试官要求MasMas写一个程序找出几个数中,出现次数为奇数的那个数。
MasMas抓耳挠腮,请你帮帮他。

输入描述

第一行输入一个数n(1 \leq n \leq 10^7 ,n\mod\ 2\ =\ 1 )(1n107,nmod 2 = 1)
接下来nn个整数ii (ii在 intint 范围内 ),保证只有一个数出现奇数.

输出描述

输出出现次数为奇数的数

输入样例

  1. 5
  2. 1 1 2 3 3

输出样例

  1. 2

样例解释

  1. 1 出现 2
  2. 2 出现 1
  3. 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,得到本身。故该题得解。

 

SYCOJ411

原文:https://www.cnblogs.com/Astronaut0142/p/14851844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!