算法:根据一个开关确定一百人是否都进入过房间

该算法来源于我研究生课堂上,老师提出的一讨论题:

假设教室有一开关,现有100人,他们必须设计一个规则,利用该开关确定所有的人都进入过教室,所有人在设计好规则后都不允许再接触共享信息,且每个人被叫入教室的时机和次数都是随机的。


场景一:假设教室的开关的状态一开始为off(两种状态,off和on)

思路:从100个人中选择一个人进行计数,并且只有计数的人才能关闭按钮,其他非计数人如果进入该教室,有三种选择:

1.如果发现开关处于on状态就什么也不做直接出去

2.如果发现开关处于off状态且自己为第一次进入教室则将开关打开

3.如果发现开关处于off状态且自己为非第一次进入教室则直接离开教室

   最终直至计数人确定已关闭由其他人开启的99次开关后,报告所有人已全部进入过房间。


场景二:假设教室的开关一开始状态不知

思路:仍然从100个人中选择一个人进行计数,并且只有计数的人才能关闭按钮,此时其他非计数的人需都按两次开关,有种选择:

1.如果发现开关处于on状态就什么也不做直接出去

2.如果发现开关处于off状态且自己为第一次进入教室则将开关打开

3.如果发现开关处于off状态且自己为第二次进入教室则将开关打开

4.如果发现开关处于off状态且自己已两次进入教室则直接离开教室

    最终直至计数人确定已关闭198次开关后,报告所有人已全部进入过房间。


该算法为课堂小游戏,觉得这个比较有趣,就把其记录下来,一开始大家讨论的时候都说要七个开关,老师说一个的时候大家都炸了,不过如果真只有一个开关,这个游戏得花不少时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值