本文主要是介绍算法:根据一个开关确定一百人是否都进入过房间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
该算法来源于我研究生课堂上,老师提出的一讨论题:
假设教室有一开关,现有100人,他们必须设计一个规则,利用该开关确定所有的人都进入过教室,所有人在设计好规则后都不允许再接触共享信息,且每个人被叫入教室的时机和次数都是随机的。
场景一:假设教室的开关的状态一开始为off(两种状态,off和on)
思路:从100个人中选择一个人进行计数,并且只有计数的人才能关闭按钮,其他非计数人如果进入该教室,有三种选择:
1.如果发现开关处于on状态就什么也不做直接出去
2.如果发现开关处于off状态且自己为第一次进入教室则将开关打开
3.如果发现开关处于off状态且自己为非第一次进入教室则直接离开教室
最终直至计数人确定已关闭由其他人开启的99次开关后,报告所有人已全部进入过房间。
场景二:假设教室的开关一开始状态不知
思路:仍然从100个人中选择一个人进行计数,并且只有计数的人才能关闭按钮,此时其他非计数的人需都按两次开关,有种选择:
1.如果发现开关处于on状态就什么也不做直接出去
2.如果发现开关处于off状态且自己为第一次进入教室则将开关打开
3.如果发现开关处于off状态且自己为第二次进入教室则将开关打开
4.如果发现开关处于off状态且自己已两次进入教室则直接离开教室
最终直至计数人确定已关闭198次开关后,报告所有人已全部进入过房间。
该算法为课堂小游戏,觉得这个比较有趣,就把其记录下来,一开始大家讨论的时候都说要七个开关,老师说一个的时候大家都炸了,不过如果真只有一个开关,这个游戏得花不少时间。
这篇关于算法:根据一个开关确定一百人是否都进入过房间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!