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😎