《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~
在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)
Q23 二十一点通吃
赌场经典的二十一点游戏 A中,每回合最少下注 1 枚硬币,赢了可以得到 2 枚硬币,输了硬币会被收走。
假设最开始只拥有 1 枚硬币,并且每回合下注 1 枚,那么 4 回合后还能剩余硬币的硬币枚数变化情况如图所示,共有 6 种(圆形中间的数字代表硬币枚数)。
问题
求最开始拥有 10 枚硬币时,持续24 回合后硬币还能剩余的硬币枚数变化情况共有多少种?
# 保存计算过的数据, 极速~
calcuted_map = {}
def gamble(count, money):
if money == 0:
return 0
if count == 0:
return 1
if (count, money) in calcuted_map:
return calcuted_map[(count, money)]
win = gamble(count-1, money-1)
lose = gamble(count-1, money+1)
calcuted_map[(count, money)] = win+lose
return win+lose
print("共有%s种" % gamble(24, 10))
运行结果:
共有16051010种