题目
- 通过递归遍历所有情况,然后通过打表找规律,遍历甲能拿的所有情况,然后乙能拿的所有情况
// balls 只能是奇数
function main(balls) {
process(0, balls, 0, 0);
// ture: 0 甲回合、1 乙回合
// jBalls、yBalls: 甲、乙拿到的球数
function process(turn, rest, jBalls, yBalls) {
if (rest === 0) {
return jBalls % 2 === 0 ? "甲" : "乙";
}
// 甲拿
if (turn === 0) {
// 剩余球数可能小于3不够了
// 遍历甲的所有情况
for (let i = 1; i <= Math.min(rest, 3); i++) {
// 甲拿了乙拿
if (process(1, rest - i, jBalls + i, yBalls) === "甲") {
return "甲";
}
}
return "乙";
} else {
// 剩余球数可能小于3不够了
// 遍历乙的所有情况
for (let i = 1; i <= Math.min(rest, 3); i++) {
// 乙拿了甲拿
if (process(0, rest - i, jBalls, yBalls + i) === "乙") {
return "乙";
}
}
return "甲";
}
}
}
// 打表找规律
for (let i = 1; i <= 500; i += 2) {
main(i);
}