取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)
對于這個題,每個人看法不一樣,理解不一樣,當然程序也不一樣。
此題目中,我設置的機器與人都是隨機數
主要原理應該大致一樣
此題中,我們的要求,拿到最后一根火柴,則算輸。
拿到最后一根火柴則算輸,那么我們應該去讓人機取火柴盡可能的讓人最后取到一根火柴。
那么則可以從前面湊數,使之剩余的火柴湊成 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)
總結
以上是生活随笔為你收集整理的取木棒21根c语言,关于m根火柴 ,人机最多取n根火柴(21根火柴进阶)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 数组比较不等往下累加,用C语言确
- 下一篇: 冒泡法排序c语言函数模板,使用模板技术的