对于这个题,每个人看法不一样,理解不一样,当然程序也不一样。
此题目中,我设置的机器与人都是随机数
主要原理应该大致一样
此题中,我们的要求,拿到最后一根火柴,则算输。
拿到最后一根火柴则算输,那么我们应该去让人机取火柴尽可能的让人最后取到一根火柴。
那么则可以从前面凑数,使之剩余的火柴凑成 m(剩余)= r(未知)*(n+1)+1
计算 m%(n+1)的余数 s ,进行判断余数与第一次人的随机数的大小值,
判断余数 s 的值,s 与 1的关系,s 与0 的关系
第一次随机数为a有多种情况,比如:
1:a < s+1 ( 为什么 s+1 ,凑数 使之最后剩一根 )这种情况的话,我们机器则 取 b = s-a
使其剩余的根数凑成 m(剩余)= r(未知)*(n+1)+1
2: a = s+1 这种情况,
具体代码如下:存在一些问题,当然没发现的话那就算了, 可当参考,发现问题的欢迎指导,
from random import*
num = int(input("请输入火柴的根数:"))
MAX = int(input("请输入拿火柴最大的根数: "))
s = num % (MAX+1)
# noinspection PyStatementEffect
if s > 1:
a = randint(1,MAX)
num -= a
if a != s - 1:
if a < s:
b = s - a - 1
num -= b
else:
b = s + MAX - a
num -= b
print("人拿%d根火柴" % a, end=" ")
print("机器拿%d根火柴" % b, end=" ")
print("还剩下: %d根火柴" % num)
else:
print("")
while num > 0:
if num >= 4:
a = randint(1, MAX)
else:
a = num
num -= a
if num == 0:
print('game over')
break
b = MAX +1 - a
num -= b
print("人拿%d根火柴" % a, end=" ")
print("机器拿%d根火柴" % b, end=" ")
print("还剩下: %d根火柴" % num)
elif s == 0:
a = randint(1,MAX-1)
num -= a
b = MAX - a
num -= a
print("人拿%d根火柴" % a, end=" ")
print("机器拿%d根火柴" % b, end=" ")
print("还剩下: %d根火柴" % num)
while num > MAX:
if num >= 4:
a = randint(1, MAX)
else:
a = num
num -= a
if num == 0:
print('game over')
break
b = MAX +1 - a
num -= b
print("人拿%d根火柴" % a, end=" ")
print("机器拿%d根火柴" % b, end=" ")
print("还剩下: %d根火柴" % num)
else:
while num > 0:
if num >= 4:
a = randint(1, MAX)
else:
a = num
num -= a
if num == 0:
print('game over')
break
b = MAX +1 - a
num -= b
print("人拿%d根火柴" % a, end=" ")
print("机器拿%d根火柴" % b, end=" ")
print("还剩下: %d根火柴" % num)