【冲刺蓝桥杯的最后30天】day3

大家好,我是想要慢慢变得优秀的向阳同学,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备战蓝桥杯的小伙伴可以支持一下哦!~不能说肯定是干货,但会让你有所收获!

今天满课,学的有点脑子混沌,就少量更新两道题,以后会补上的,见谅见谅
我们总是在生活扮演各种角色,却唯独很少扮演自己

门牌制作 - 蓝桥云课 (lanqiao.cn)

一道暴力就可以解决的模拟题,像这种需要拆解整数,一个一个进行其他运算的时候,如果复杂度要求不高,完全可以开辟一个空字符串再转换成字符数组,最后再看是否需要还原成整数,leetcode周赛第一题非常常见的套路模拟题。
    public static void main(String[] args) {
        String s = "";
        int ans = 0;
        for (int i = 1; i <= 2020; i++) {
            s = i+"";
            char[] ch = s.toCharArray();
            for (int j = 0; j < ch.length; j++) {
                if(ch[j] == '2') ans++;
            }
        }
        System.out.println(ans);//答案最后是624
    }

货物摆放 - 蓝桥云课 (lanqiao.cn)

这道题其实算是一道数论题,不能傻傻的无脑暴力,暴力是n^3次方,数据2021041820210418,就看成简单的10^16,计算机一秒运算10^8的数据量,理想情况下一共要跑3年多点,可以举办三场蓝桥杯了电脑答案还是没跑出来,所以暴力不可取!
思路:从题目举的n=4的例子可以看出来,长宽高都是n=4的时候的因数组成的,那我们可以O(n)求出n的所有因子,然后进行排列组合就可以得到正确的答案了
public class TestDemo {
    public static void main(String[] args) {
        long n = 2021041820210418L;
        long m = (long) Math.sqrt(n);
        List list = new LinkedList<>();
        for (long i = 1; i <= m; i++) {
            if (n % i == 0) {
                list.add(i);
                list.add(n / i);
            }
        }
        int ans = 0;
        long a = list.size();
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < a; j++) {
                for (int k = 0; k < a; k++) {
                    if (list.get(i) * list.get(j) * list.get(k) == n) ans++;
                }
            }

        }
        System.out.println(ans);
    }

你可能感兴趣的:(备战蓝桥杯30天,Java,蓝桥杯,算法)