【发布时间】:2016-08-28 13:18:10
【问题描述】:
我对以下挑战有疑问:
两个玩家(编号为 1 和 2)正在玩 n 块石头的游戏。玩家 1 总是先玩,两个玩家轮流移动。游戏规则如下:
玩家一次可以从棋盘上移走 2,3 或 5 块石头。 如果玩家无法移动,则该玩家输掉游戏。 给定石头的数量,找到并在新行上打印获胜者的姓名(即第一或第二)。每个玩家都以最佳方式进行游戏,这意味着如果存在更好的获胜动作,他们将不会做出导致他们输掉比赛的动作。
(输出格式
如果第一个玩家是获胜者,则在每个测试用例的新行上打印“First”;否则,打印“第二”。)
例子:
数量 = 7,玩家 = 1。
调用 getWinner(7-5,-1)
数量 = 2,玩家 = -1
调用 getWinner(2-2,1)
数量= 0,玩家= 1
该函数不应在此处返回任何内容,因为它会中止搜索,但编译器强制我添加一个返回语句。
public static String getWinner(int amount, int player){
if (amount == 0 || amount == 1){
if (player == -1) {
return "First";
}
} else if (amount-5 >=0){
return getWinner(amount-5,-player);
} else if (amount-3 >=0) {
return getWinner (amount-3,-player);
} else if(amount-2 >= 0){
return getWinner (amount -2 , -player);
} else {
return "Second";
}
return "failure";
}
【问题讨论】: