解題說明
Find the Winning Player in Coin Game
題目描述:Alice 和 Bob 輪流進行遊戲(Alice 先手)。每輪中,當前玩家必須拿取 1 枚面值 75 的硬幣和 4 枚面值 10 的硬幣。無法完成此操作的玩家輸。給定面值 75 的硬幣數 x 和面值 10 的硬幣數 y,判斷誰贏。
解題思路:每輪消耗 1 枚 75 分硬幣和 4 枚 10 分硬幣。遊戲能進行的總輪數為 min(x, y / 4)。若總輪數為奇數,Alice 贏(她完成了最後一輪);偶數則 Bob 贏。
C++ 解法
複雜度分析
時間複雜度:O(1) — 僅需一次 min 運算和模運算。
空間複雜度:O(1) — 僅使用常數空間。
虛擬碼
1. Compute rounds = min(x, y / 4) 2. If rounds is odd, Alice wins; else Bob wins 3. Return winner's name
其他解法
模擬法 O(min(x, y/4)):直接模擬每一輪,交替扣除硬幣直到無法繼續。正確但在硬幣數量大時較慢,且完全不必要,因為可以直接用數學公式計算。
延伸思考
- 如果每輪的硬幣需求不同(例如第 k 輪需要 k 枚 75 分硬幣),問題如何變化?
- 如果有三種面值的硬幣且每輪需要各取一定數量,贏家如何決定?
- 如果玩家可以選擇拿取的數量(在某個範圍內),這變成什麼類型的博弈論問題?