有 n
个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。
请判定 第一个玩家 是输还是赢?
样例
n = 1
, 返回 true
.
n = 2
, 返回 true
.
n = 3
, 返回 false
.
n = 4
, 返回 true
.
n = 5
, 返回 true
.
具体的解释在注释里,这里注意求得是必胜的情况,不是有可能胜的情况。
class Solution {
public:
/**
* @param n: an integer
* @return: a boolean which equals to true if the first player will win
*/
bool firstWillWin(int n) {
// write your code here
//你拿1个,我就拿2个;你拿2个,我就拿1个
//所以只要硬币数目是3的倍数,则后手赢
//相反,若硬币数是3的倍数+1或者2,则先手可以拿下剩余的
if(n%3 == 0)
return false;
return true;
}
};