OpenJudge-1.7.04:石头剪子布

一、题目链接

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 {
    /**
     * 返回石头剪子布游戏的获胜方集合
     *
     * @param player1 String类型的数组,存储1号选手所有的出拳
     * @param player2 String类型的数组,存储2号选手所有的出拳
     * @return String类型的数组,存储player1和player2每次出拳的获胜方
     */
    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])) { // 如果本次player1和player2出拳相同
                ans[i] = "Tie"; // 则标记本次结果为Tie
            }
            // 否则如果本次player1获胜
            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"; // 则标记本次结果为Player1
            }
            else { // 否则,本次player2获胜
                ans[i] = "Player2"; // 则标记本次结果为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; // player1出拳的内容
    string player2; // player2出拳的内容
    /* 从第一次出拳开始,到最后一次出拳为止 */
    for (int i = 1; i <= N; i++)
    {
        cin >> player1; // 输入player1本次出拳的内容
        cin >> player2; // 输入player2本次出拳的内容
        // 如果本次player1获胜
        if (player1 == "Rock" && player2 == "Scissors" ||
             player1 == "Scissors" && player2 == "Paper" ||
             player1 == "Paper" && player2 == "Rock")
        {
            cout << "Player1"; // 则输出Player1
        }
        else if (player1 == player2) // 否则如果本次player1和player2出拳相同
        {
            cout << "Tie"; // 则输出Tie
        }
        else // 否则,本次player2获胜
        {
            cout << "Player2"; // 则输出Player2
        }
        cout << endl; // 输出一个空行准备下一次游戏
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江苏科技大学_计算机学院_潘磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值