编程学习网 > 编程语言 > Python > python经典教程(Python经典算法常胜将军)
2023
06-07

python经典教程(Python经典算法常胜将军)

这篇文章主要为大家介绍Python经典算法——常胜将军的实现过程。常胜将军就是取火柴游戏,题目描述如下:甲、乙两人玩抽取火柴的游戏,一共有21根火柴。两个人轮流取火柴,每人每次最少取1根火柴,最多可以取4根火柴,不可多取,也不能不取,谁取到最后一根火柴谁就输了。甲让乙先取火柴,结果每次都是甲获胜,甲即为“常胜将军”。


该问题可以这样思考:火柴一共有21根,甲让乙先取火柴,每次乙都会输。要让甲成为“常胜将军”,就需要每次都让乙取到最后一根火柴。因为21除以5的余数是1,所以,在甲乙双方每次取火柴的时候,甲只要保证抽取火柴的数量和乙抽取火柴的数量之和为5,就可以让自己成为“常胜将军”。

根据上面的分析,编写程序实现游戏玩家双方抽取火柴的过程,代码如下:

01     import random

02     def take_match(match):

03         id = 0          # 根据id切换玩家

04         take_num = 0    # 保存抽取火柴的数量

05         while match >= 1:       # 火柴全部取完时结束循环

06             id += 1             # id值加1

07             if id % 2 == 1:     # 如果id值是奇数

08                 gamer = "乙"     # 当前玩家为乙

09                 if match > 5:   # 如果火柴数多于5个

10                     take_num = random.randint(1,4)    # 随机抽取火柴数量

11                 else:

12                     take_num = 1        # 抽取最后一根火柴

13             else:

14                 gamer = "甲"     # 当前玩家为甲

15                 take_num = 5 - take_num     # 玩家甲抽取火柴数量

16             match -= take_num   # 还剩多少火柴

17             # 格式化输出玩家名称、抽取火柴数量和剩余火柴数量

18             print("{:>2s}{:>11d}{:>15d}".format(gamer, take_num, match))

19     print("玩家{:3s}抽取火柴数量{:3s}剩余火柴数量".format("", ""))

20     print("-" * 34)

21     take_match(21)              # 调用函数

运行结果如图所示。

以上就是python经典教程(Python经典算法常胜将军)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取