HDOJ-1563-Find your present! 解题报告

来源:互联网 发布:阿里云地域选择 编辑:程序博客网 时间:2024/05/23 13:25

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


1 0