大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨💻,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备战蓝桥杯的小伙伴可以支持一下哦!~不能说肯定是干货,但会让你有所收获!💓💓💓
今天满课,学的有点脑子混沌,就少量更新两道题,以后会补上的,见谅见谅
🍭🍭我们总是在生活扮演各种角色,却唯独很少扮演自己🍭🍭
一道暴力就可以解决的模拟题,像这种需要拆解整数,一个一个进行其他运算的时候,如果复杂度要求不高,完全可以开辟一个空字符串再转换成字符数组,最后再看是否需要还原成整数,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}
这道题其实算是一道数论题,不能傻傻的无脑暴力,暴力是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);}
上一篇:三、Spark 内存管理