鱼C论坛

 找回密码
 立即注册
查看: 1428|回复: 3

[已解决]找礼物

[复制链接]
发表于 2022-10-29 22:22:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在一次实验室聚会上,学长发送x(奇数)个礼物,并且标出了编号。每个人都得到了学长的礼物,学长在其中一个礼物里面设置了大奖,除了大奖编号只出现一次以外。其余每个编号均出现两次,
现在给你所有人拿到的礼物编号,你能找到这个大奖礼物的编号吗?
最佳答案
2022-10-29 22:41:33
#include <bits/stdc++.h>
using namespace std;

int ans, temp, n;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> temp;
        ans ^= temp;
    }

    cout << ans ;

    return 0;
}
异或 (^) 的性质 :  a ^ b ^ a = b
a ^ b ^ b = a
就是一个数异或两次另一个数 , 结果还等于原数 , 可以利用这个性质做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-29 22:41:33 | 显示全部楼层    本楼为最佳答案   
#include <bits/stdc++.h>
using namespace std;

int ans, temp, n;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> temp;
        ans ^= temp;
    }

    cout << ans ;

    return 0;
}
异或 (^) 的性质 :  a ^ b ^ a = b
a ^ b ^ b = a
就是一个数异或两次另一个数 , 结果还等于原数 , 可以利用这个性质做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-29 22:48:58 | 显示全部楼层
柿子饼同学 发表于 2022-10-29 22:41
异或 (^) 的性质 :  a ^ b ^ a = b
a ^ b ^ b = a
就是一个数异或两次另一个数 , 结果还等于原数 , 可 ...

可以详细讲下思路吗?
代码有点看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-29 23:00:40 | 显示全部楼层
wuheqian 发表于 2022-10-29 22:48
可以详细讲下思路吗?
代码有点看不懂

就只用了异或啊
n 就是 n 个礼物 , ans 就是最终中奖的那个答案 , temp 就是每次读入的编号
由于一个数异或两次另一个数结果等于原数 , 异或一次就等于异或的数
因此每次读进 temp 把它和 ans 相异或
因为只有一个只出现一次的数 , 所以那些出现两次的相互抵消 , 最后只剩下那个中奖的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表