这个题的代码真的是短的不得了呢。
有个神奇的东西叫异或,写起来是这个样子的^。
这个东西可以查看2个数的二进制某位是否相同,相同取0,不同取1。虽然我用的不熟,但我可以想出来,如果2个相同的数异或,答案一定是0。因为他们每一位都一样嘛。
而且异或是满足交换律的,顺序什么的不重要,于是我们只要把所有数异或起来,看剩下的数是那个,那个就是多出来的筷子。
短小的代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long a,b,shu;
int main()
{
scanf("%lld",&a);
for(int i=0;i<a;i++)
{
scanf("%lld",&b);
shu^=b;//异或
}
printf("%lld",shu);
return 0;
}
总结:会异或,而且可以想到,就非常好做。