位运算巧解题。题意:给你n个数,n为奇数,这n个数里面除了一个数只出现一次其他数都有出现两次,请输出那个出现一次的数。
我的解题思路:根据异或运算性质,相同的数异或等于0,0与任何数异或都得任何数,异或运算满足交换律。这么以来把这所有的数都异或之后就得到了只出现一次的数了。
我的解题代码:
#include <cstdio> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <climits> #include <algorithm> using namespace std; const int N = 200; int num[N], n, ans; int main() { while (~scanf("%d", &n) && n) { for (int i=0; i<n; ++i) scanf("%d", &num[i]); ans = num[0]; for (int i=1; i<n; ++i) ans ^= num[i]; printf("%d\n", ans); } return 0; }