【蓝桥杯】2021省赛真题详解

🐏小怜怜的简介:

💖博客主页:浣熊小怜怜

🚀年龄:21 大二在读

💪爱好:干饭,运动,码代码,看书,音乐

🎉欢迎关注🔍点赞👍收藏🎇留言📙

🎄有任何疑问,欢迎留言讨论!!!

目录

🎈A ASC

🎈B 空间

🎈C 卡片

🎈D 相乘

🎈E 路径

🎈F 时间显示

🎈G 最少砝码

🎈H 杨辉三角形

🎈A ASC

本题总分:5 分

问题描述

已知大写字母 A的 A S C I I 码为 65 ,请问大写字母 L 的 A S C I I 码是多少?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个数,填写多余的内容将无法得分。

 System.out.println((int)'L');

76 ASCIL码

🎈B 空间

本题总分:5 分

问题描述

小蓝准备用 256 M B的内存空间开一个数组,数组的每个元素都是 32位二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256 M B 的空间可以存储多少个 32位二进制整数?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

MB 全称 兆字节( M e g a B y t e s )

而 1 B y t e = 8 b i t s,也就是一个 32 位整形占用 4 B y t e

同时 1M B = 2 ^10 K B = 2 ^20B 将 256 256256 除 4 再乘以 2^20 就行了。

import java.math.BigInteger;
​
public class B空间 {
    public static void main(String[] args) {
        BigInteger n=new BigInteger("2");
        n= n.pow(20).multiply(BigInteger.valueOf(256)).divide(BigInteger.valueOf(4));
        System.out.println(n);
    }
}
import java.util.*;
 
public class Main
{
    public static void main(String args[])
    {
        long mb=256;
        long m=1024;
        long b=1024;
        long Byte=8;
        System.out.println(mb*m*b*Byte/32);
    }
}

67108864 单位换算问题 1 MB= 2^10 KB= 2^20 B 一个整数占4B 问512MB可以放多少个整数?

🎈C 卡片

本题总分:10 分

问题描述

小蓝有很多数字卡片,每张卡片上都是数字 0 到 9 。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10 ,但是拼 11时卡片 1 已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021张,共 20210 张,请问小蓝可以从 1 拼到多少? 提示:建议使用计算机编程解决问题。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

public class C卡片 {
    public static void main(String[] args) {
        int a[] = new int[10];//0-9
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            a[i] = 2021;//每个数字有2021个
        }
        for (int i = 1; ; i++) {//死循环,不结束
            int tmp = i;
            boolean flag = true;
            while (tmp > 0 && flag) {
                int pos = tmp % 10;
                tmp /= 10;
                if (--a[pos] < 0) {
                    flag = false;
                }
            }
            if (!flag) {
                break;
            }
            sum++;
        }
        System.out.println(sum);
    }
}

利用数组存1-2021的卡片 a[i]=2021

利用for循环和while循环取最后一个数进行判断

🎈D 相乘

本题总分:10 分

问题描述

小蓝发现,他将 1 11 至 1000000007 10000000071000000007 之间的不同的数与 2021 20212021 相乘后再求除以1000000007 10000000071000000007 的余数,会得到不同的数。 小蓝想知道,能不能在 1 11 至 1000000007 10000000071000000007 之间找到一个数,与 2021 20212021 相乘后再除以1000000007 10000000071000000007 后的余数为 999999999 999999999999999999。如果存在,请在答案中提交这个数; 如果不存在,请在答案中提交 0 00。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

public class D相乘 {
    public static void main(String[] args) {
        for (int i=1; i <=1000000007 ; i++) {
            if (i*2021L%1000000007== 999999999){
                System.out.println(i);
            }
        }
    }
}

17812964 大数字计算要加上单位L!!

🎈E 路径

本题总分:15 分

问题描述

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。 小蓝的图由 2021 个结点组成,依次编号 1 至 2021 1。对于两个不同的结点 a , b,如果 a 和 b 的差的绝对值大于 21,则两个结点之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条长度为 a和 b的最小公倍数的无向边相连。 例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无向边,长度为 24 ;结点 15 和结点 25之间有一条无向边,长度为 75。 请计算,结点 1 和结点 2021 之间的最短路径长度是多少。 提示:建议使用计算机编程解决问题。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

脑壳疼,不懂最短路径问题啊!

🎈F 时间显示

时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

问题描述

小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970年 1 月 1 日 00:00:00到当前时刻经过的毫秒数。 现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需显示出时分秒即可,毫秒也不用显示,直接舍去即可。 给定一个用整数表示的时间,请将这个时间对应的时分秒输出。

输入格式

输入一行包含一个整数,表示时间。

输出格式

输出时分秒表示的当前时间,格式形如 H H :M M:S S ,其中 H H 表示时,值为 0 到 23 ,M M 表示分,值为 0 到 59,S S 表示秒,值为 0 到 59 。时、分、秒不足两位时补前导 0 。

测试样例1

Input:
46800999
​
Output:
13:00:00
12345

测试样例2

Input:
1618708103123
​
Output:
01:08:23
public class F时间显示 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long time = sc.nextLong();
        //输入毫秒 输出时:分:秒
        // 1min=60s=6000ms  1h=60min=3600s=360000ms
        time = time / 1000;
        long hh = time / 3600 % 24;
        long mm = time / 60 % 60;
        long ss = time % 60;
        System.out.println(f(hh) + ":" + f(mm) + ":" + f(ss));
​
    }
​
    public static String f(long x) {
        if (x < 10) {
            return "0" + x;
        } else {
            return "" + x;
        }
    }
}

简单说就是输入毫秒数 输出时:分:秒 ,简单的单位换算!!

🎈G 最少砝码

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

问题描述

你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。 那么这套砝码最少需要包含多少个砝码? 注意砝码可以放在天平两边。

输入格式

输入包含一个正整数 N 。

输出格式

输出一个整数代表答案。

测试样例1

Input:
7
​
Output:
3
​
Explanation:
3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。
1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
少于 3 个砝码不可能称出 1 至 7 的所有重量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

评测用例规模与约定

  对于所有评测用例,1 ≤ N ≤ 1000000000 1 ≤ N ≤ 10000000001≤N≤1000000000。

package com.year2021SC;
​
import java.util.Scanner;
​
public class G最少砝码 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int weight = 1;//对应砝码序列的重量
        int count = 1;//砝码个数
        int total = 0;//总重量
        while (total < n) {
            count++;
            weight *= 3;
            total += weight;
        }
        System.out.println(count);
    }
}

思路解析

找规律的题!!详解看上面链接

🎈H 杨辉三角形

时间限制: 5.0s 内存限制: 512.0MB 本题总分:20 分

在我的上上篇博客有详解~~杨辉三角详解

待更新~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值