一、题目链接
http://noi.openjudge.cn/ch0107/04/
二、解题思路(Java)
◎ 在Java中,判断两个字符串的内容是否相同,需要使用equals方法,而非==符号,equals方法返回true,当且仅当两个字符串的内容相同,
否则返回false;
◎ 根据题意,在第i次出拳时,包含如下三种可能性:
→ 如果player1和player2出拳相同,判断表达式为:
*** player1[i].equals(player2[i])
→ 否则如果player1获胜,判断表达式为:
*** player1[i].equals("Rock") && player2[i].equals("Scissors") ||
player1[i].equals("Scissors") && player2[i].equals("Paper") ||
player1[i].equals("Paper") && player2[i].equals("Rock")
→ 否则,player2获胜,以上两种可能性均不成立时,本可能性成立;
◎ 方法public String[] whoWins(String[] player1, String[] player2)处理所有业务逻辑:
→ 参数player1为String类型的数组,存储1号选手所有的出拳;
→ 参数player2为String类型的数组,存储2号选手所有的出拳;
→ whoWins方法返回String类型的数组,存储player1和player2每次出拳的获胜方;
◎ 定义int类型的整数n,代表猜拳游戏的次数,令player1.length;
◎ 定义String类型的数组ans,存储每次出拳的获胜方;
◎ 从第一次出拳开始,到最后一次出拳为止,利用循环i处理如下:
→ 如果本次player1和player2出拳相同,则令ans[i] = "Tie";
→ 否则如果本次player1获胜,则令ans[i] = "Player1";
→ 否则,本次player2获胜,则令ans[i] = "Player2";
循环i结束后,ans中存储了每次出拳的获胜方,返回ans;
◎ 在main方法中调用whoWins方法,注入相应的参数后即可获得计算结果。
三、解题思路(C++)
◎ 在C++中,判断两个字符串的内容是否相同,可以使用==符号,结果为true,当且仅当两个字符串的内容相同,否则结果为false;
◎ 根据题意,在每次出拳时,包含如下三种可能性:
→ 如果player1获胜,判断表达式为:
*** player1 == "Rock" && player2 == "Scissors" || player1 == "Scissors" && player2 == "Paper" ||
player1 == "Paper" && player2 == "Rock"
→ 否则如果player1和player2出拳相同,判断表达式为:
*** player1 == player2
→ 否则,player2获胜,以上两种可能性均不成立时,本可能性成立;
◎ 定义并输入int类型的整数N,代表猜拳游戏的次数;
◎ 定义两个string类型的字符串player1、player2,分别代表player1出拳的内容、player2出拳的内容;
◎ 从第一次出拳开始,到最后一次出拳为止,利用循环i处理如下:
→ 输入player1、player2;
→ 如果本次player1获胜,则输出Player1;
→ 否则如果本次player1和player2出拳相同,则输出Tie;
→ 否则,本次player2获胜,输出Player2;
→ 输出一个空行;
循环i结束后,猜拳游戏每次的获胜方均被输出。
四、Java程序
import java.util.Scanner;
public class Main {
public String[] whoWins(String[] player1, String[] player2) {
int n = player1.length;
String[] ans = new String[n];
for (int i = 0; i < n; i++) {
if (player1[i].equals(player2[i])) {
ans[i] = "Tie";
}
else if (player1[i].equals("Rock") && player2[i].equals("Scissors") ||
player1[i].equals("Scissors") && player2[i].equals("Paper") ||
player1[i].equals("Paper") && player2[i].equals("Rock")) {
ans[i] = "Player1";
}
else {
ans[i] = "Player2";
}
}
return ans;
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int i;
String[] player1 = new String[N];
String[] player2 = new String[N];
String[] ans;
for (i = 0; i < N; i++) {
player1[i] = input.next();
player2[i] = input.next();
}
ans = test.whoWins(player1, player2);
for (i = 0; i < N; i++) {
System.out.println(ans[i]);
}
}
}
五、C++程序
#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
string player1;
string player2;
for (int i = 1; i <= N; i++)
{
cin >> player1;
cin >> player2;
if (player1 == "Rock" && player2 == "Scissors" ||
player1 == "Scissors" && player2 == "Paper" ||
player1 == "Paper" && player2 == "Rock")
{
cout << "Player1";
}
else if (player1 == player2)
{
cout << "Tie";
}
else
{
cout << "Player2";
}
cout << endl;
}
return 0;
}