問題:
有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最后一枚硬幣的人獲勝。
請判定 第一個玩家 是輸還是贏?
樣例
n = 1, 返回 true.
n = 2, 返回 true.
n = 3, 返回 false.
n = 4, 返回 true.
n = 5, 返回 true.
分析:
- 隱含假設二人都是高手,都會盡可能采取最優策略讓自己獲勝
- 從后向前分析,即最后剩多少硬幣時第一個人可以獲勝?一定是3個。因此逐漸遞推,只要是3個一組,對方先取,就一定獲勝。
- 唯一壞的情況就是n是3的倍數。
代碼:
bool firstWillWin(int n) {
// write your code here
return n%3;
}
只有一行,竟還是中等難度。