【发布时间】:2014-07-27 13:54:31
【问题描述】:
问题如下:
在 Nim 游戏中,两名玩家交替从一堆弹珠中取出。在 每一步,玩家选择要拿多少个弹珠。玩家 必须至少取一个但最多一半的大理石。然后另一个 玩家轮到。拿走最后一个弹子的玩家输了。
编写一个程序,让两个玩家互相对战。这 程序首先提示玩家输入初始大小(范围:10~100 包括)那堆弹珠。然后,两名玩家轮流输入 要采取的弹珠数量。该程序应打印的数量 每转一圈后留下的弹珠。当剩下一颗弹子时游戏停止 桩。应打印中奖信息以表明谁是中奖者 游戏结束后。你可以假设玩家总是输入一个 数字在正确的范围内。完成程序后,您可以 和你的邻居一起玩这个游戏。
示例如下:
Initial no. of marbles [10 ~ 100]: 15
Player1 [1 ~ 7]: 6
Remaining no. of marbles: 9
Player2 [1 ~ 4]: 4
Remaining no. of marbles: 5
Player1 [1 ~ 2]: 2
Remaining no. of marbles: 3
Player2 [1 ~ 1]: 1
Remaining no. of marbles: 2
Player1 [1 ~ 1]: 1
Remaining no. of marbles: 1
Player2 takes the last marble.
Player1 wins!
这是我的个人尝试(未完成):
import java.util.Scanner;
public class WhoTakesTheLastMarble {
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
System.out.print("Intial no. of marbles [10 ~ 100]: ");
int n1 = in.nextInt();
int[] x = new int[91];
for (int i = 10; i<=100; i++) {
x[i] = in.nextInt();
}
System.out.print("Plyaer1 [1 ~ " +(n1/2) +"]:");
int n2 = in.nextInt();
System.out.println("Remaining no. of marbles: " +(n1-n2));
int n3 = in.nextInt();
System.out.print("Player2 [1 ~ " +(n3/2) +"]: ");
int n4 = in.nextInt();
System.out.println("Remaining no. of marbles: " +(n3-n4));
}
}
我面临的问题是如何将 for-loop/while-loop 应用到整个事情中,以便它们可以一次又一次地重复,直到 (剩余弹珠数量:1)?
谁能花五到十分钟帮我解决这个问题并教我你解决这个问题的方法吗?非常感谢:)
【问题讨论】: