APP下载

Python解有趣的推理运算

2020-01-13

电脑报 2020年45期
关键词:嵌套甲队编程

在悬疑小说里,主人公经常会根据一些已知的条件,推理出真凶。推理,逻辑学指思维的基本形式之一,是由一个或者几个已知的判断(前提)推出新的判断(结论)的过程,有直接推理、间接推理等。

今天我们用编程解决一道基础的推理题目:两个羽毛球队各选出三人进行单打比赛。甲队为ABC三人,乙队为XYZ三人,用抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和X比,C说他不和X、Z比,请编程找出比赛的名单。这是谭浩强C程序设计中的练习题,我们用Python一样可以解。

文字推理:题中两个队伍,每队由三个人组成,首先考虑甲队的C不和乙队的X和Z比赛,那么剩下只有Y了;其次甲队的A不和乙队的X比赛,那么只能和乙队的Z比赛;最后剩下甲队的B和乙队的X进行比赛。如果我们用文字的方式去推理这道题非常简单,但我们如何用编程的思维用程序解决这道题目呢?(图1)

根据推导的条件可以得出甲队不能和相邻乙队队员进行比赛,即X不能和A,Y不能和B,Z不能和C比赛。所以题目中我们用循环嵌套为对战安排顺序,为了避免参赛队员重复比赛所以设置判断语句,在双层循环中嵌套一个if判断排除掉重复参赛的可能性,经过排除后两队中任意2人比赛的可能性为6种:XY,YX,XZ,ZX,YZ,ZY。接下来在判断语句中添加循环,处理队伍的最后一个人的变量K,循环中先经过两次判断,保证第三个人与队伍中前两个人不重复,结果为XYZ,YXZ,XZY,ZXY,YZX,ZYX。然后,隊伍中的每个人的次序需要打乱,不能和相邻的对手进行比赛(比如A不能和X比赛,B不能和Y进行比赛,C不能和Z进行比赛)。排除这些所有的可能性,便可以根据题目的要求筛选出符合题意的对手:A-Z,B-X,C-Y(图2)。

如何从文字的推理到编写出程序的过程还是略微有些复杂的,刚开始编写的时候我比较懵,后来反复阅读,仔细打了草稿才明白其中的道理,大家也可以想想是否有更好的办法来解决对手分配问题,期待你们的答案(图3)。

猜你喜欢

嵌套甲队编程
玩游戏学编程,Blockly Games上手玩
下一个字母
是甲队的吗
纺织机上诞生的编程
一类应用题的由繁到简的解法
编程屋完成数百元万天使轮融资
学编程,先画画
嵌套交易如何实现逆市盈利
多参数最大、最小值嵌套问题的研究
巧用嵌套交易实现逆市盈利