位运算巧解题。题意:给你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;
}