您现在的位置是:课程
Python小程序:囚犯问题
2023-06-30 21:10课程 人已围观
自顶向下程序设计方法的关键是分治法,即把一个大问题分解为若干小问题,每个小问题再分解为更小的问题,......,以此类推直到问题可以直接解决为止。本课程用一个有趣的问题——囚犯问题为例,说明了用自顶向下程序设计方法解决问题的思路。囚犯问题是:
2.每天会随机地抽取一名囚犯放风;
3.放风的地方有一盏电灯,囚犯可以任意开关这盏电灯;
4.电灯永久有电,永远不会损坏;
5.囚犯在放风的地方以及来回的路上都不会被其他囚犯看见;
6.牢房相互之间隔绝,囚犯相互之间不可能传递任何消息;
7.囚犯在放风时除了开关电灯不能留下任何痕迹或者信息;
8.看守只负责随机抽取囚犯,不会帮助囚犯传递信息;
9.如果有人确定所有人都被放风过,可以通知看守,看守确认之后可以把所有囚犯释放。如果永远没有人通知,或者通知的人弄错了(并不是所有人都被放风过),则所有人将永久坐牢,永无出头之日;
10.囚犯们可以商议一个方法出来以便避免永久坐牢。商议好之后就会被关进各自的牢房。
我们的问题是:囚犯们会商议出什么办法?
对于第一次接触这个问题的人来说,囚犯问题似乎有些难度。但是只要按照自顶向下的程序设计方法,先编写主程序,然后编写被主程序直接调用的子程序,再编写子程序的子程序,......,以此类推,这个问题也是很好解决的。请看视频。
一群囚犯即将被带到牢房里坐牢。看守把他们集中在一起,宣布:
1.每个囚犯将被单独关在一个牢房里;2.每天会随机地抽取一名囚犯放风;
3.放风的地方有一盏电灯,囚犯可以任意开关这盏电灯;
4.电灯永久有电,永远不会损坏;
5.囚犯在放风的地方以及来回的路上都不会被其他囚犯看见;
6.牢房相互之间隔绝,囚犯相互之间不可能传递任何消息;
7.囚犯在放风时除了开关电灯不能留下任何痕迹或者信息;
8.看守只负责随机抽取囚犯,不会帮助囚犯传递信息;
9.如果有人确定所有人都被放风过,可以通知看守,看守确认之后可以把所有囚犯释放。如果永远没有人通知,或者通知的人弄错了(并不是所有人都被放风过),则所有人将永久坐牢,永无出头之日;
10.囚犯们可以商议一个方法出来以便避免永久坐牢。商议好之后就会被关进各自的牢房。
我们的问题是:囚犯们会商议出什么办法?
对于第一次接触这个问题的人来说,囚犯问题似乎有些难度。但是只要按照自顶向下的程序设计方法,先编写主程序,然后编写被主程序直接调用的子程序,再编写子程序的子程序,......,以此类推,这个问题也是很好解决的。请看视频。