大家好,我是想要慢慢变得优秀的向阳同学,断更了整整一年,又开始恢复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);
}