使用Java编写以下程序:
假设玩家 1 有 7 个骰子,玩家 2 有 5 个骰子(所有 12 个骰子都是标准的 1 到 6 骰子并且公平)。两名玩家都掷骰子并比较各自的总和(即玩家 1 掷骰子 1,3,5,2,6,1,1 = 19,玩家 2 掷骰子 2,1,4,6,3 = 16)。如果玩家 1 掷出的总和高于玩家 2,则玩家 1 赢得比赛,否则玩家 2 获胜。如果掷出所有 2,176,782,336 个组合,玩家 1 将赢得多少场比赛? Player2 会赢得多少场比赛?有多少场比赛会出现平局? (注:只需打印回答三个问题的总和)
我陷入困境的部分是如何保证我没有重复的卷?
谢谢。
import java.util.Random;
public class KDice {
public static void main(String[] args) {
Random random = new Random();
long playerOneWins = 0, playerTwoWins = 0, ties = 0;
int playerOneSum, playerTwoSum;
//for long number use L as suffix
for (long i = 0; i < 2176782336L; i++) {
//roll dice for player 1
playerOneSum = rollDice(random, 7);
//roll dice for player 2
playerTwoSum = rollDice(random, 5);
//find who won
if (playerOneSum == playerTwoSum) {
ties++;
} else if (playerOneSum > playerTwoSum) {
playerOneWins++;
} else {
playerTwoWins++;
}
}
//after all the round done, display stats
System.out.println("Player 1 win: " + playerOneWins);
System.out.println("Player 2 win: " + playerTwoWins);
System.out.println("Ties: " + ties);
}
public static int rollDice(Random random, int count) {
int sum = 0;
for (int i = 0; i < count; i++) {
sum += generateRandomNumber(random);
}
return sum;
}
public static int generateRandomNumber(Random random) {
return random.nextInt(6) + 1; //return number between 1 to 6
}
}
最佳答案
为了模拟 12 个骰子的每种可能的掷骰,我使用 12 个嵌套的 for 循环,以便可以生成每种可能的骰子。
我用这个循环替换了随机掷骰子:
int[] dice = new int[12];
for (dice[0] = 1; dice[0] <= 6; dice[0]++) {
System.out.println("dice[0] = " + dice[0]);
for (dice[1] = 1; dice[1] <= 6; dice[1]++) {
System.out.println("dice[1] = " + dice[1]);
for (dice[2] = 1; dice[2] <= 6; dice[2]++) {
System.out.println("dice[2] = " + dice[2]);
for (dice[3] = 1; dice[3] <= 6; dice[3]++) {
for (dice[4] = 1; dice[4] <= 6; dice[4]++) {
for (dice[5] = 1; dice[5] <= 6; dice[5]++) {
for (dice[6] = 1; dice[6] <= 6; dice[6]++) {
for (dice[7] = 1; dice[7] <= 6; dice[7]++) {
for (dice[8] = 1; dice[8] <= 6; dice[8]++) {
for (dice[9] = 1; dice[9] <= 6; dice[9]++) {
for (dice[10] = 1; dice[10] <= 6; dice[10]++) {
for (dice[11] = 1; dice[11] <= 6; dice[11]++) {
playerOneSum = dice[0] + dice[1] + dice[2] + dice[3] + dice[4] + dice[5] + dice[6];
playerTwoSum = dice[7] + dice[8] + dice[9] + dice[10] + dice[11];
//find who won
if (playerOneSum == playerTwoSum) {
ties++;
} else if (playerOneSum > playerTwoSum) {
playerOneWins++;
} else {
playerTwoWins++;
}
}
}
}
}
}
}
}
}
}
}
}
}
跑完大约需要三四分钟。我放入 println 是为了避免我太不耐烦。结果是:
Player 1 win: 1877280394
Player 2 win: 225654001
Ties: 73847941
关于java - 如何解决 Java 中的哈希冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61390303/