蓝桥杯算法双周赛心得——被替换的身份证(分类讨论)

大家好,我是晴天学长,分类讨论一定要细节啊,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


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). 代码实例

java 复制代码
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的情况。

试题链接:

相关推荐
geats人山人海2 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu3 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7983 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭3 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶3 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z4 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯4 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频