现在的位置: 首页 > 综合 > 正文

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

2018年04月21日 ⁄ 综合 ⁄ 共 466字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.