3222. 求出硬币游戏的赢家
题目描述:
给你两个 正 整数 x
和 y
,分别表示价值为 75 和 10 的硬币的数目。
Alice 和 Bob 正在玩一个游戏。每一轮中,Alice 先进行操作,Bob 后操作。每次操作中,玩家需要拿出价值 总和 为 115 的硬币。如果一名玩家无法执行此操作,那么这名玩家 输掉 游戏。
两名玩家都采取 最优 策略,请你返回游戏的赢家。
示例 1:
输入: x = 2, y = 7
输出:"Alice"
解释:
游戏一次操作后结束:
- Alice 拿走 1 枚价值为 75 的硬币和 4 枚价值为 10 的硬币。
示例 2:
输入: x = 4, y = 11
输出:"Bob"
解释:
游戏 2 次操作后结束:
- Alice 拿走 1 枚价值为 75 的硬币和 4 枚价值为 10 的硬币。
- Bob 拿走 1 枚价值为 75 的硬币和 4 枚价值为 10 的硬币。
提示:
1 <= x, y <= 100
解题分析及思路:
方法:方法
思路:
价值总和为 115 的硬币只能由 115=75+10+10+10+10 组成,每一名玩家需要拿走 1 枚价值 75 的硬币以及 4 枚价值 10 的硬币。
那么,设能拿到【 1 枚价值 75 的硬币以及 4 枚价值 10 的硬币】的次数为 opt
- 如果 opt 为偶数,那么最后一次被Bob拿走,那么Bob是赢家。
- 如果 opt 为奇数,那么最后一次被Alice拿走,那么Alice是赢家。
func losingPlayer(x int, y int) string {
opt := min(x, y/4)
if opt%2 == 0 {
return "Bob"
} else {
return "Alice"
}
}
复杂度:
- 时间复杂度:O(1)
- 空间复杂度:O(1)
执行结果:
- 执行耗时:0 ms,击败了100.00% 的Go用户
- 内存消耗:3.9 MB,击败了6.90% 的Go用户