Java 完成RPS游戏的最大赢取次数
我需要帮助写一些代码,计算最大可能的胜利在N游戏的石头剪刀布Java 完成RPS游戏的最大赢取次数,java,algorithm,Java,Algorithm,我需要帮助写一些代码,计算最大可能的胜利在N游戏的石头剪刀布 我得到了数字N,这是石头剪纸游戏的数量,后面是N组整数(1,2,3),每个整数都链接到石头,布或剪刀。但是,我们不知道每个选项的链接数。我需要帮助计算第一个人可能赢得的最大游戏数量。 < P>,让我们考虑可能如何排序价值的案例。我们可以构造一个环,其中每个数字丢失到下一个值 1相对于2松开:2不能相对于1松开,因此只能相对于3松开,3必须相对于1松开,因此1b表示“a赢b” 除了这两种可能性之外,没有其他可能性,因为每个号码都必须
我得到了数字N,这是石头剪纸游戏的数量,后面是N组整数(1,2,3),每个整数都链接到石头,布或剪刀。但是,我们不知道每个选项的链接数。我需要帮助计算第一个人可能赢得的最大游戏数量。 < P>,让我们考虑可能如何排序价值的案例。我们可以构造一个环,其中每个数字丢失到下一个值
- 1相对于2松开:2不能相对于1松开,因此只能相对于3松开,3必须相对于1松开,因此
,其中1<2<3<1
表示“a相对于b松开”a
- 2输给1:1不能输给2,所以它必须输给3,必须输给2所以
,其中1>2>3>1
表示“a赢b”a>b
w
)和抽签(d
)时获胜的次数。因此,使用所选配置,玩家赢得的游戏数量为w
,或者如果选择相反的配置,则为N-平局-w
int[] A = readPlayerOne();
int[] B = readPlayerTwo();
int draws = 0;
int wins = 0;
for(int i = 0; i < N; i++)
{
if(A[i] == B[i])
draws++;
else if(A[i] - 1 == B[i] || A[i] == 1 && B[i] == 3)
//wins according to the first configuration
wins++;
}
return max(N - draws - wins, wins);
int[]A=readPlayerOne();
int[]B=readPlayerTwo();
int=0;
int=0;
对于(int i=0;i
首先,我们可以忽略具有两个相似数字的线,因为它们产生平局(不影响分数),您可以利用以下提示:
- 每个(石头、布、剪刀)都有1个输、1个赢和1个平局组合,例如: 石头能赢剪刀,能输纸牌,能用另一块石头画画,所以如果你假设1-2让玩家1赢,你就能知道1-3是输的
- 您只能在二维数组中保存每个组合的player1 player2输入的计数
- 您只有以下两种组合:
int in[][] = new int[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
in[i][j] = 0;
for (int i = 0 ; i < N; i++) {
int p1 = scan.nextInt();
int p2 = scan.nextInt();
if(p1 != p2)
in[p1][p2]++;
}
int maxWins = Math.max(in[1][2]+in[2][3]+in[3][1],
in[1][3]+in[2][1]+in[3][2]);
int in[][]=新int[4][4];
对于(int i=0;iYou只有6种可能为游戏选择(石头、布、剪刀)分配数字。为什么不使用暴力?对于这些可能,有六种不同的方法,然后主要使用比较语句是否有效?我可能采用这种方法