zl程序教程

您现在的位置是:首页 >  后端

当前栏目

蓝桥杯第二次模拟赛JAVA题解

JAVA模拟 蓝桥 题解 第二次
2023-09-27 14:27:53 时间

🐏小羊简介:


💖博客主页:小羊不会飞

🚀年龄:20    大二在读   

💪爱好:干饭,运动,码代码,看书,旅游

📃即将更新:

🎯1、手把手带你搭建个人博客网站

🎯2、后台管理系统模块更新

🚍:感兴趣的朋友,赶紧上车吧!!

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

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


目录

第一题🎈

第二题🎈

第三题🎈

第四题🎈

第五题🎈

第六题🎈

第七题🎈

第八题

第九题🎈

第十题


第一题🎈

 255

一般来说第一题都是白给的,但是这个题目需要一些计算机网络的知识,不然就真的“白给”了!!!

简单来说一下吧,IPv4中 IP地址是32位二进制表示,分成四段,每段8位二进制,即2的八次方个数,*表示其中的一段,因为是从0开始的,所以最大是255

(个人见解哦,有问题欢迎评论区留言)

第二题🎈

class test2{
    int []a=new int[2040];
    void method(){
        for (int i=2;i<2021;i++){
            if(2021%i==0){
                for(int j=1;i*j<=2021;j++){
                    a[i*j]=1;
                }
            }
        }
        int t=0;
        for(int k=0;k<2040;k++){
            if(a[k]==1)
                t++;
        }
        System.out.println(t);
    }
}

89

这个题目的话没啥难度,直接暴力解,但是我对它题目的表述表示很不理解😵(g应该是能被A和B整除才对吧!),我看了老半天,一度怀疑自己,不过根据它后面的举例可以明白意思,不影响做题!

第三题🎈

class test3{
    int []a=new int[2030];
    void method(){
        for(int i=1;i<=2021;i++){//这个地方i<=2021加等号主要是因为2021容易被漏掉
            for(int j=1;j<=i;j++){//这个地方要j<=i,主要是i=1的时候容易被漏掉
                for (int k=0;k<j;k++ ){
                    if(i==(j*j-k*k)){
                        a[i]=1;
                    }
                }
            }
        }
        int l=0;
        for(int t=1;t<2030;t++){
            if(a[t]==1)
                l++;
        }
        System.out.println(l);
    }
}

1516

这个题目的话要细心一点,因为很容易做错,容易漏掉1和2021这两个数😄

第四题🎈

 219

哈夫曼编码题

第五题🎈

class test5{
    void method(){
        String s="FFEEFEAAECFFBDBFBCDA  DACDEEDCCFFAFADEFBBA " +
                " FDCDDCDBFEFCEDDBFDBE  EFCAAEECEECDCDECADDC  DFAEACECFEADCBFECADF  DFBAAADCFAFFCEADFDDA " +
                " EAFAFFDEFECEDEEEDFBD  BFDDFFBCFACECEDCAFAF  " +
                "EFAFCDBDCCBCCEADADAEBAFBACACBFCBABFDAFBEFCFDCFBCEDCEAFBCDBDDBDEFCAAAACCFFCBBAAEECFEFCFDEEDCACDACECFF " +
                " BAAAFACDBFFAEFFCCCDB  FADDDBEBCBEEDDECFAFFCDEAFBCBBCBAEDFDBEBB " +
                "BBABBFDECBCEFAABCBCFFBDBACCFFABEAEBEACBBDCBCCFADDCACFDEDECCCBFAFCBFECAACAFBCFBAF";
        char[] g=s.toCharArray();
        int a=0;
        int b=0;
        int c=0;
        int d=0;
        int e=0;
        int f=0;
        for(int i=0;i<s.length();i++){
            if(g[i]=='A')a++;
            if(g[i]=='B')b++;
            if(g[i]=='C')c++;
            if(g[i]=='D')d++;
            if(g[i]=='E')e++;
            if(g[i]=='F')f++;
        }
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);


    }
}

 直接暴力就完事儿了!!!

第六题🎈

class test6{
    void method(){
        Scanner scanner = new Scanner(System.in);
        int p=scanner.nextInt();
        int t=scanner.nextInt();
        int k=t/12+1;
        System.out.println(p*k);
    }
}

送分题,哈哈✨

第七题🎈

class test7{
    void method(){
        Scanner scanner = new Scanner(System.in);
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        int c=scanner.nextInt();
        int k=Math.max(a,b);
        int j=Math.max(a,c);
        int t=Math.max(k,j);
        if(2*t*t==(a*a+b*b+c*c)) System.out.println("YES");
        else System.out.println("NO");
    }
}

 读完题目,直接暴力,没啥技巧可言,找一个最大边,然后用一下勾股定理就好了🤷‍♀️

第八题

哈哈哈,这个题目当时没想出来,等考完六级的时候我再仔细思考一下!!

第九题🎈

 

class test9 {
    void method() {
        /**
         * 第一种方法
         */
        Scanner scanner = new Scanner(System.in);
        int N = 1020;
        double p = Math.pow(10, 9) + 7;
        int h = (int) p;
        int n = scanner.nextInt();
        int[] f = new int[N];
        int k = n / 2;
        for (int i = 1; i <= n; i++) {
            f[0] = 1;
            f[i] = 1;

            for (int j = i - 1; j > 0; j--) {
                f[j] = (f[j - 1] + f[j]) % h;
            }
        }
        System.out.println(f[k]);
    }

    /**
     * 第二种方法
     */
    void method_2() {
        //推出转态方程后,可以参考蓝桥杯第一次模拟赛中利用杨辉三角求组和数问题的方法
        int p=1000000007;
        int[][] a = new int[1010][1010];
        int t = 1000000007;
        a[0][0] = 1;
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            a[i][0] = 1;
            for (int j = 1; j <= i; j++) {
             a[i][j]=(a[i-1][j]+a[i-1][j-1])%p;
            }
        }
        System.out.println(a[n][(n+1)/2]);
    }
}

这道题目还是组合数的问题,关键在于找出转态方程,这里我给出了两种解法,第二种解法在我上一篇博客《蓝桥杯第一次模拟赛JAVA题解》的题解中有出现!

第十题

这个题目当时也没在出来,六级考完再仔细想想!!

🎉最后总结如下:

第二次模拟赛比第一次的难度略有提升,不过跟真题比起来还是差点意思,然后我有两题没做出来(我是算法小菜鸡),等六级结束再继续肝算法!!!!