1. 程式人生 > >《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q23)

《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q23)

《程式設計師的演算法趣題》-(日)增井敏克 , 書中為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種