100个犯人与灯泡

100名囚犯面临一个挑战,他们需通过一个灯泡来判断所有人是否都曾进入过同一间房间。初始灯泡关闭。囚犯们需要设计策略,确保在某个时刻能确定所有人都进过房间。提示提到,每个囚犯可以看作有一个小球,而房间是只有一个球容量的盒子。解题关键在于计数。代码实现部分提出,设定一个计数者,其他囚犯有两次机会开灯,当计数达到198次时,表明所有人都已进入过房间。
摘要由CSDN通过智能技术生成

有 100 个囚犯分别关在 100 间牢房里。牢房外有一个空荡荡的房间,房间里有一个由开关控制的灯泡。初始时,灯是关着的(或者随机)。看守每天随便选择一名囚犯进入房间,但保证每个囚犯都会被选中无穷多次。如果在某一时刻,有囚犯成功断定出所有人都进过这个房间了,所有囚犯都能释放。游戏开始前,所有囚犯可以聚在一起商量对策,但在此之后它们唯一可用来交流的工具就只有那个灯泡。他们应该设计一个怎样的协议呢?请根据此协议设计实现一个程序,把解题过程详细输出并给出解题所需天数。

这个题目挺有意思的,建议自己先独立思考一下然后再看下面的解答

Hint

相当于每个人都只有一个小球,那个房间是一个只能放下一个小球的盒子,每个人将自己的小球放入盒子,计数者负责把每个小球收走并计数,如果收到小球的数量达到了99个,就说明每个人都进入过了这个房间

代码实现

#include <bits/stdc++.h>
using namespace std;

int counter, cnt;
bool vis[100];
bool flag;
void put(int id</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值