C语言100个囚徒和灯泡,经典算法问题其一:百日囚徒问题

开始更新博客啦~   计划每周研究一道算法问题,并给出解决方案和代码实现(python),欢迎大家提出看法和意见,有更优的解决方案更是强烈欢迎。

这次的问题是几天前看到的一个算法问题,先是自己想了半天,找到一个解决方案,然后和朋友讨论并找到了一个更优解,网上没有搜到几条比较相关的解决方法,所以发出来和大家分享一下。

问题描述:

监狱中关着100名囚犯,每人在一个独立的房间里,且无法用任何方式相互通信;每天会有随机一人被选出来放风,放风的地方有一盏灯,囚犯可以打开或关闭它,其他没有任何人会去动这个灯,其他囚犯不知道是谁被选中放风,也无法看到灯。

某一天国王召集所有囚犯开了一个会,向他们说:如果某一天有人说所有的囚犯都已经放过风了,且情况属实,则所有人都会被释放,如果说错了则所有人都要被处死,然后给了囚犯20分钟讨论时间。

不考虑灯损坏或犯人意外死亡的理想情况下,他们能找出办法让所有人都被释放吗?

大家可以先尝试思考一下,题中很明确只能通过开关灯和灯的亮灭传递消息,所以不要走进死胡同想别的通信方式了,就是设计一个算法,能只通过灯就知道是否所有人都放过风了。

你可能感兴趣的:(C语言100个囚徒和灯泡)