大家好,我是晴天学长,分类讨论一定要细节啊,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪
1) .被替换的身份证
2) .算法思路
假设一方获胜
1.接受数据
2.假设潜梦醒
无非就是,出单,对子,(王炸有的话必赢)。
3).算法步骤
1.创建一个字符串s,其中包含了扑克牌的排列顺序。
2.创建一个空字符串s1,用于接收输入的数据。
3.通过读取输入的第一行,将其转换为整数T,表示测试用例的数量。
4.进入一个循环,循环次数为测试用例的数量T。
5.通过读取输入的每一行,将其存储在字符串s1中,并使用空格分割为两部分。
6.将分割后的第一部分赋值给字符串qian,表示先手玩家手中的牌。
7.将分割后的第二部分赋值给字符串ling,表示后手玩家手中的牌。
8.进行先手必赢的情况判断:
(1)如果先手玩家的牌是"MF",或者两张牌相同,或者是"FM",则输出"ShallowDream",表示先手玩家必胜。
9.进行后手必赢的情况判断:
(1)如果后手玩家的牌是"MF"或者"FM",则输出"Joker",表示后手玩家必胜。
10.处理其他情况,即先手和后手都没有必胜的情况:
(1)由于先手只能出单牌,所以只需要比较双方手中牌的最大值即可。
(2)使用字符串s中的索引来确定牌的大小,找到先手玩家和后手玩家手中牌的最大值。
(3)如果先手玩家手中的最大牌大于等于后手玩家手中的最大牌,则输出"ShallowDream"。
(4)否则,输出"Joker"。
11.循环结束后,程序结束。
4). 代码实例
import jdk.swing.interop.SwingInterOpUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
String s = "3456789XJQKA2MF";
String s1 = "";
s1 = in.readLine();
int T = Integer.parseInt(s1);
for (int i = 0; i < T; i++) {
s1 = in.readLine();
String[] tokens = s1.split(" ");
String qian = tokens[0];
String ling = tokens[1];
//先手必赢的情况
if (qian.equals("MF") || (qian.charAt(0) == qian.charAt(1) || qian.equals("FM"))) {
System.out.println("ShallowDream");
continue;
}
if (ling.equals("MF") || ling.equals("FM")) {
System.out.println("Joker");
continue;
}
//其他情况,就是拿的两个不一样的牌,只能出单子,并且两个人没有王炸的情况。
//只能单的单的比,因为先手出不起双的。
//只需要比较双方的牌中,有谁的牌最大,就赢。
int qiandan = Math.max(s.indexOf(qian.charAt(0)), s.indexOf(qian.charAt(1)));
int lingdan = Math.max(s.indexOf(ling.charAt(0)), s.indexOf(ling.charAt(1)));
if (qiandan >= lingdan) {
System.out.println("ShallowDream");
} else {
System.out.println("Joker");
}
}
}
}
4).总结
- 正确的分类讨论,注意MF和FM的情况。
试题链接: