大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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;
}
}
}
}
}