首页 > 编程语言 >python算法:常胜将军

python算法:常胜将军

时间:2024-05-16 11:41:13浏览次数:25  
标签:-------- 计算机 python 常胜将军 算法 火柴 人取 total 21

一,题目

有火柴21根,两人依次取,
每次每人只可取走1~4根,
不能多取,也不能不取,
谁取到最后一根火柴谁输。

请编写一个人机对弈程序,
要求人先取,计算机后取;
计算机为“常胜将军”。

二,解析

要想让计算机是“常胜将军”,就需要让人取到最后一根火柴。这个怎么实现?就是在倒数第二轮时计算机只剩下1根火柴给人,因为此时人至少取1根火柴。这样就可保证计算机常胜了

为了计算机能够取到倒数第二根火柴,就要保证倒数第二轮开始前剩下5+1=6棵火柴。因为只有这样才能保证无论人怎样取火柴,计算机都能将1根之外的火柴全部取走。

以此类推
21根火柴,在人先取计算机后取、每次取1~4根的前提下,只要保证每一轮的抽取(人先取一次,计算机再取一次)时人抽到的火柴数与计算机抽到的火柴数之和为5,就可以实现计算机的常胜不败
因为这样可以保证到人取火柴剩余数量为1

三,代码实现

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 total = 21   # 火柴总数为21根 print("开始游戏: ") while 1:     print(f"--------当前还剩火柴{total}根--------")     people = int(input("人取火柴:")) # 人取火柴     if people < 1 or people > 4 or people > total:         print("取火柴数量有问题!")         continue     total = total-people  # 人取后,剩余的火柴数     # 人取后,剩余的火柴数为0,则计算机获胜,跳出循环     if total == 0:         print("计算机获胜,游戏结束!")         break     # 计算机取火柴     computer = 5 - people     total = total - computer     print(f"计算机取火柴:{computer}")     # 计算机取后,剩余的火柴数为0,则人获胜,跳出循环     if total == 0:         print("人获胜,游戏结束!")         break

运行结果:

开始游戏: 
--------当前还剩火柴21根--------
人取火柴:3
计算机取火柴:2
--------当前还剩火柴16根--------
人取火柴:4
计算机取火柴:1
--------当前还剩火柴11根--------
人取火柴:2
计算机取火柴:3
--------当前还剩火柴6根--------
人取火柴:1
计算机取火柴:4
--------当前还剩火柴1根--------
人取火柴:1
计算机获胜,游戏结束!

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/30/python-suan-fa-chang-sheng-jiang-jun/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]

 

标签:--------,计算机,python,常胜将军,算法,火柴,人取,total,21
From: https://www.cnblogs.com/architectforest/p/18195662

相关文章

  • python算法:求车速
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • python算法:新郎新娘
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • python算法:五家共井
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • python算法:青蛙跳台阶二
     一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3......
  • python算法:读书
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • python算法:公交车问题
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • python算法:借书方案
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • python算法:分糖果
    一,while循环:1,功能:重复执行同一段代码语法:while条件表达式:  #循环体当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达式的返回值,如果表达式返回的结果为假,则退出循环体2,流程图:3,打印从1到1012345#打印从1到1......
  • python算法:平分7筐鱼
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • 接口自动化测试框架【python+requests+pytest+excel+allure+jenkins】
    一.在整个框架中需要用到哪些东西?1.python环境安装https://www.python.org/downloads/windows/下载解压后直接安装,选择Addpythontopath2.JAVA环境配置安装包下载地址:https://www.oracle.com/java/technologies/downloads/环境变量设置参数如下:●变量名:JAVA_HOME●变......