# 第44期-抢数游戏

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

有一个抢数游戏,其规则是两人轮流报数,每次可以报m个数,但不许不报也不许多报,第二个人接着往下报,
然后第一个人接着往下报,以此类推,那么第一个人第一次应该报x才可能稳抢到n.
要求:输入m,n,输出第一次应该报x
比如:输入:4 56
输出:第一次应该报1

# 2 解题思路

  • 第一步: 首先分析赢的条件,假设每次可以报4个数,要想抢到56,则自己上次报的数以满足以下条件:①、与56的距离大于四,②、不管对手报的是几,自己都能报到56。而对手报的最小数字是一,所以自己上次报的数必须与56的距离为5
  • 第二步: 将4换成m,那么自己只要保证每次与对手报的数和为m+1便可胜利
  • 第三步: 由于自己先报,又要保证之后每次与对手报的数和为m+1,那么只需要报的数与n的距离为m+1的倍数即可
  • 第四步: 既然如此,那么若数n本身就是m+1的倍数,自己就一定会输
  • 第五步: 经过以上分析,可以开始写代码了!

# 3 解题方法

def a(m, n):
    if n % (m + 1) == 0:
        print('在对手不失误的情况下,您输定了')
    else:
        a = n % (m + 1)
        print(f'第一次应该报{a}')

m, n = map(int, input('请输入单次最大报数以及最终胜利数,中间用空格隔开').split())
a(m, n)
1
2
3
4
5
6
7
8
9

第1行: 定义函数a,其内自变量m,n,m表示最大报数,n表示最终数
第2行: 判断最终数是否是最大报数加一的倍数
第3行: 是,则输出自己输定了
第4-5行: 不是倍数的情况下,求n除以m+1的余数
第6行: 输出该余数就是自己要报的数
第8行: 使用map(int, input().split())输入m、n并提示用户用空格隔开
第9行: 引用函数a()

代码运行结果为:
image.jpg

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM