L1-044 稳赢(Java)

发布时间:2024年01月18日

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

输出样例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

解题思路

基本的胜负规则:锤子胜剪刀,剪刀胜布,布胜锤子。接下来,我们需要处理平局的情况,每隔K次出招就要出一个与对方相同的手势以形成平局。

我们可以通过一个计数器来追踪每隔K次的情况。每接收到一个新的手势,计数器加1。如果计数器到达K,就输出一个平局的手势,并重置计数器。否则,输出一个能赢对手的手势。

解题过程中遇到的问题

该题如果使用Scanner会遇到运行超时问题,所以还是需要改为

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int K = Integer.parseInt(br.readLine()); // 读取平局间隔次数
        int counter = 0; // 设置计数器

        while (true) {
            String opponent = br.readLine();
            if ("End".equals(opponent)) {
                break;
            }


            if (counter == K) {
                // 每隔K次输出平局手势
                System.out.println(opponent);
                counter = 0; // 重置计数器
            } else {
                // 输出赢招
                switch (opponent) {
                    case "ChuiZi":
                        System.out.println("Bu");
                        counter++;
                        break;
                    case "JianDao":
                        System.out.println("ChuiZi");
                        counter++;
                        break;
                    case "Bu":
                        System.out.println("JianDao");
                        counter++;
                        break;
                }
            }
        }
    }
}
文章来源:https://blog.csdn.net/Gracener/article/details/135678015
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。