这个题的代码真的是短的不得了呢。
有个神奇的东西叫异或,写起来是这个样子的^。
这个东西可以查看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; }
总结:会异或,而且可以想到,就非常好做。