蓝桥杯31天冲刺打卡题解(Day25)

Day25

第一题

第十一届2020年蓝桥杯省赛

成绩统计

签到题,模拟,利用Math.round()函数四舍五入。

import java.util.Scanner;

public class Main {

    static final int N = 10010;
    static int[] a = new int[N];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double cnt1 = 0, cnt2 = 0;
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            if (a[i] >= 60) cnt1++;
            if (a[i] >= 85) cnt2++;
        }

        System.out.println(Math.round((cnt1 / n) * 100) + "%");
        System.out.println(Math.round((cnt2 / n) * 100) + "%");
    }
}

第二题

第十一届2020年蓝桥杯省赛

既约分数

C++B组第2题

填空题

枚举两重for循环用gcd求解。

public class Main {
    public static void main(String[] args) {
        int cnt = 0;
        for (int i = 1; i <= 2020; i++) {
            for (int j = 1; j <= 2020; j++) {
                if (gcd(i, j) == 1) cnt++;
            }
        }

        System.out.println(cnt);
    }

    private static int gcd(int a, int b) {
        return b != 0 ? gcd(b, a % b) : a;
    }
}

第三题

第十届2019年蓝桥杯国赛

最优包含

C++B组第6题

DP

这是一道线性DP最短编辑距离的问题,但是少了插入和删除操作,只有替换,参考AcWing题解

import java.io.*;

public class Main {

    static final int N = 1010, INF = 100000; // 此处用一个较大的整数表示无穷
    static int[][] dp = new int[N][N];

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s = in.readLine();
        String t = in.readLine();
        int n = s.length(), m = t.length();
        /*
            dp这个二维数组中,竖列代表s,横列代表t,t比s短,到后面会有很多空串,
            无论怎么修改都不会使空串变长,故先全部初始化为无穷;
            与之区别。s先全部初始化为0
            注意代码 先后顺序 ,要保证dp[0][0]=0
        */
        for (int i = 0; i <= m; i++) dp[0][i] = INF;
        for (int i = 0; i <= n; i++) dp[i][0] = 0;

        // 查改过程 
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                dp[i][j] = dp[i - 1][j]; // 如果s的前i个包括t的前j个,那么s的前i-1个应该也包括t的前j个
                if (s.charAt(i - 1) == t.charAt(j - 1))
                    // 这里和其它答案写得不太一样,但是不减一的话会导致下标超出范围值
                    dp[i][j] = Math.min(dp[i - 1][j - 1], dp[i][j]); // 相当于不作处理直接跳过
                else
                    dp[i][j] = Math.min(dp[i - 1][j - 1] + 1, dp[i][j]); // 操作数加一
                	// 储存着整个s和t的最小编辑距离
            }
        }
        
        System.out.println(dp[n][m]);
    }
}
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小成同学_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值