day13 第十一届蓝桥杯国赛 JavaB

day13(每日一题)

🎉前言:每日更新!不断更!,周内一天一题.周末算法精析

✨更新地址:Royeblog

🎆🎆第十一届国赛javaB 试题A: 美丽的 2

🎉题目链接:题号1018

简单描述题目:

小蓝特别喜欢 22,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2?

public class A美丽的2 {
    public static void main(String[] args) {
        int count=0;
        for (int i = 1; i <= 2020; i++) {
            String s=i+"";
            if (s.contains("2")){
                count++;
            }
        }
        System.out.println(count);
    }
}

数据量不大,直接字符串处理😎

🎆🎆第十一届国赛javaB 试题B: 扩散

🎉题目链接:题号1019

简单描述题目:
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。
小蓝在画布上首先点了一下几个点:(0 , 0),(2020, 11),(11, 14),(2000, 2000)。只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。
请问,经过 2020分钟后,画布上有多少个格子是黑色的。

public class B扩散 {
    public static void main(String[] args) {
        int count=0;
        for (int i = -10000; i <= 10000; i++) {
            for (int j = -10000; j <= 10000; j++) {
                if (Math.abs(i-0)+Math.abs(j-0)<=2020){
                    count++;continue;
                }
                if (Math.abs(i-2020)+Math.abs(j-11)<=2020){
                    count++;continue;
                }
                if (Math.abs(i-11)+Math.abs(j-14)<=2020){
                    count++;continue;
                }
                if (Math.abs(i-2000)+Math.abs(j-2000)<=2020){
                    count++;continue;
                }
            }
        }
        System.out.println(count);
    }
}

难道第二题就bfs了?不可能绝对不可能,看距离小于2020不就好了?😎

🎆🎆第十一届国赛javaB 试题C: 阶乘约数

🎉题目链接:题号1020

简单描述题目:
定义阶乘 n ! = 1 × 2 × 3 × ⋅ ⋅ ⋅ × n 。
请问 100! (100 的阶乘)有多少个约数。

package com.bainiao.十一届2020;

public class C阶乘约数 {
    public static void main(String[] args) {
//        boolean[] flag=new boolean[101];
//        for (int i =2; i <= 100; i++) {
//            for (int k = 2; i*k <= 100; k++) {
//                if (!flag[i]){
//                    flag[i*k]=true;
//                }
//            }
//        }
//        for (int i = 2; i <= 100; i++) {
//            if (!flag[i]){
//                System.out.print(i+",");
//            }
//        }
        int[] arr = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
        int[] count=new int[arr.length];
        long ans = 1;
        for (int i = 1; i <= 100; i++) {
            for (int j = 0; j < arr.length; j++) {
                int temp = i;
                while (temp % arr[j] == 0) {
                    count[j]++;
                    temp = temp / arr[j];
                }
            }
        }
        for (int i = 0; i < count.length; i++) {
            ans*=(count[i]+1);
        }
        System.out.println(ans);
    }
}

任意一个正整数x都可以表示成若干个质数乘机的形式

最后的结果就是质因子的出现次数+1之后连乘即可

比如8=222, 约数为1,2,4,8 正约数=(3+1)=4

比如180=22335 则正约数=(2+1)(2+1)(1+1)=18😎

❗❗总结:好好学习每一天
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值