蓝桥杯·3月份刷题集训Day04

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在这里插入图片描述

本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白水平有限如果文章中有什么错误之处希望小伙伴们可以在评论区指出来共勉。

文章目录

集训A

A1、单词分析

题目小蓝正在学习一门神奇的语言这门语言中的单词都是由小写英文字母组 成有些单词很长远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词他准备不再完全记忆这些单词而是根据单词中哪个字母出现得最多来分辨单词。

现在请你帮助小蓝给了一个单词后帮助他找到出现最多的字母和这 个字母出现的次数。

输入格式

输入一行包含一个单词单词只由小写英文字母组成。

对于所有的评测用例输入的单词长度不超过 1000。

输出格式

输出两行第一行包含一个英文字母表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等输出字典序最小的那个。

第二行包含一个整数表示出现得最多的那个字母在单词中出现的次数。

输入输出样例

示例 1

输入

lanqiao

输出

a
2

示例 2

输入

longlonglongistoolong

输出

o
6

运行限制

  • 最大运行时间1s
  • 最大运行内存: 256M

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        int[] arr = new int[26];
        for (int i = 0; i < str.length(); i++) {
            arr[str.charAt(i) - 'a']++;
        }

        int max = 0;
        char ch = 'a';
        for (int i = arr.length - 1; i >= 0; i--) {
            if (arr[i] >= max) {
                max = arr[i];
                ch = (char)(i + 'a');
            }
        }
        System.out.println(ch);
        System.out.println(max);
    }
}

A2、门牌制作

题目

本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可。

小蓝要为一条街的住户制作门牌号。

这条街一共有 20202020 位住户门牌号从 11 到 20202020 编号。

小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符最后根据需要将字符粘贴到门牌上例如门牌 1017 需要依次粘贴字符 1、0、1、71、0、1、7即需要 11 个字符 0022 个字符 1111 个字符 77。

请问要制作所有的 11 到 20202020 号门牌总共需要多少个字符 22

运行限制

  • 最大运行时间1s
  • 最大运行内存: 128M

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        int count = 0;
        for(int i = 1; i <= 2020; i++) {
            int num = i;
            while(num != 0) {
                if(num%10==2) {
                    count ++;
                }
                num /= 10;
            }
        }
        System.out.println(count);
    }
}

集训B

B1、一元三次方程求解

题目有形如ax3 + bx2 + cx + d = 0 这样的一个一元三次方程。给出该方程中各项的系数(a*bc*d 均为实数)并约定该方程存在三个不同实根(根的范围在 −100 至 100 之间)且根与根之差的绝对值 ≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格)并精确到小数点后 2 位。

提示记方程 f*(x)=0若存在 2 个数 x1x2x1<x2f(x1) × f(x2) < 0则在 (x1x2)之间一定有一个根。

输入格式

输入一行4 个实数 a,b,c,d

输出格式

输出一行3 个实根从小到大输出并精确到小数点后 2 位。

输入输出样例

输入

1 -5 -4 20

输出

-2.00 2.00 5.00

运行限制

  • 最大运行时间1s
  • 最大运行内存: 128M

解题代码

import java.util.Scanner;

/**
 * @author QIA
 * @create 2023-03-26-21:48
 */
public class Main {
    public static void main(String[] args) {

        // 暴力枚举
        Scanner rd = new Scanner(System.in);
        double a = rd.nextDouble();
        double b = rd.nextDouble();
        double c = rd.nextDouble();
        double d = rd.nextDouble();
        for (double i = -100; i <= 100; i += 0.01)
            if (Math.abs(a * i * i * i + b * i * i + c * i + d) < 0.000001)
                System.out.printf("%.2f ", i);
    }
}

B2、删除字符

题目给定一个单词请问在单词中删除 t 个字母后能得到的字典序最小的单词是什么

输入格式

输入的第一行包含一个单词由大写英文字母组成。

第二行包含一个正整数 t

其中单词长度不超过 100t 小于单词长度。

输出格式

输出一个单词表示答案。

输入输出样例

输入

LANQIAO
3

输出

AIAO

运行限制

  • 最大运行时间1s
  • 最大运行内存: 128M

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 接收字符串
        String s = sc.nextLine();
        // 删除字符长度
        int size = sc.nextInt();
        // 将接收的字符串转换为整型数组
        int[] ch = new int[s.length()];
        // 用于存储删除后的元素数组
        int[] arr = new int[s.length() - size];

        int count = 0;
        int a = 0, flag = a;
        for (int i = 0; i < s.length(); i++) {
            ch[i] = s.charAt(i) - 'A';
        }
        while (size > 0) {
            flag = a;
            for (int i = a; i <= flag + size; i++) {
                if (ch[a] > ch[i]) {
                    a = i;
                }
            }
            size -= (a-flag);
            arr[count++] = ch[a];
            a++;
        }
        for (int i = a; i < ch.length; i++) {
            arr[count++] = ch[i];
        }
        // 遍历并输出不用换行
        for (int j : arr) {
            System.out.print((char) (j + 'A'));
        }
        sc.close();
    }
}

集训C

C1、摆动序列

题目如果一个序列的奇数项都比前一项大偶数项都比前一项小则称为一个摆动序列。即 a2i< a2i−1,a2i+1 > a2i

小明想知道长度为 m每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。

输入格式

输入一行包含两个整数 mn (1≤n,m≤1000)。

输出格式

输出一个整数表示答案。答案可能很大请输出答案除以 10000 的余数。

输入输出样例

输入

3 4

输出

14

运行限制

  • 最大运行时间1s
  • 最大运行内存: 256M

解题代码

import java.util.Scanner;

/**
 * 动态规划  2020 模拟赛
 * 摆动序列
 * @author QIA
 * @create 2023-03-27-9:20
 */
public class Main {

    static int[][] dp = new int[1004][1004];
    public static int isList(int m, int n) {
        int sum;
        for (int i = 1; i <= n; i++) {
            dp[1][i] = n - i + 1;
        }
        for (int i = 2; i <= m; i++) {
            if (i % 2 != 0) {
                for (int j = n; j >= 1; j--) {
                    dp[i][j] = (dp[i-1][j-1] + dp[i][j+1]) % 10000;
                }
            }else {
                for (int j = 1; j <= n; j++) {
                    dp[i][j] = (dp[i-1][j+1] + dp[i][j-1]) % 10000;
                }
            }
        }
        if (m%2 != 0){
            sum = dp[m][1];
        }else {
            sum = dp[m][n];
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        System.out.println(isList(m, n));
        sc.close();
    }
}

C2、格子刷油漆

题目X 国的一段古城墙的顶端可以看成 2×N 个格子组成的矩形如下图所示现需要把这些格子刷上保护漆。

img

你可以从任意一个格子刷起刷完一格可以移动到和它相邻的格子对角相邻也算数但不能移动到较远的格子因为油漆未干不能踩

比如a d b c e f 就是合格的刷漆顺序。c e f d a b 是另一种合适的方案。

当已知 N 时求总的方案数。当 N 较大时结果会迅速增大请把结果对 109+7 取模。

输入格式

输入数据为一个正整数不大于 1000。

输出格式

输出数据为一个正整数。

输入输出样例

输入

2

输出

24

运行限制

  • 最大运行时间1s
  • 最大运行内存: 256M

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    static long mod = 1000000007;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] a = new long[n + 1];
        long[] b = new long[n + 1];
        long sum;
        a[1] = 1; a[2] = 6;b[1] = 1;
        for (int i = 2; i <= n; i++) {
            b[i] = 2 * b[i-1] % mod;
        }
        for (int i = 3; i <= n; i++) {
            a[i] = (2*a[i-1] + b[i]+4*a[i-2])%mod;
        }
        sum = (4 * a[n]) % mod;
        for (int i = 2; i < n; i++) {
            sum += ((2*2*a[n-i]*2*b[i-1])%mod + (2*2*a[i-1]*2*b[n-i]%mod)) % mod; // 这里记得都要取余
            sum %= mod;
        }
        System.out.println(sum);
    }
}

最后

有帮助的话希望可以点赞❤️+收藏⭐谢谢各位大佬~~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“蓝桥杯·3月份刷题集训Day04” 的相关文章