day01
🎉前言:每日更新!不断更!,周内一天一题.周末算法精析
✨更新地址:Royeblog
🎆🎆第十三届国赛javaB A重合次数
🎉题目链接:题号2271
✨简单描述题目:
在同一天中, 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒, 钟表上的 分针和秒针一共重合了多少次?
注意时针、分针、秒针都围绕中心敳匀速运动。
import java.util.Date;
public class A重合次数 {
public static void main(String[] args) {
Date datefirst=new Date();
datefirst.setHours(6);
datefirst.setMinutes(13);
datefirst.setSeconds(22);
Date dateend=new Date();
dateend.setHours(14);
dateend.setMinutes(36);
dateend.setSeconds(20);
long qujian=dateend.getTime()-datefirst.getTime();
int ans=0;
for (long i = 0; i < qujian; i=i+1000) {
Date temp=new Date(i+datefirst.getTime());
int minutes = temp.getMinutes();
int seconds = temp.getSeconds();
if (minutes==seconds){
ans++;
}
}
System.out.println(ans-8);
}
}
一开始没怎么深度理解题,直接模拟,按照一秒一秒走,每当minutes==seconds就是重合算出来502
!!!一看答案494 我靠没有考虑一个小时周末可能重合60次?减去经过了8小时
细心决定成败
🎆🎆第十三届国赛javaB B数数
🎉题目链接:题号2218
✨简单描述题目:任何一个大于 1 的正整数都能被分解为若干个质数相乘, 比如 28=2×2×7 被分解为了三个质数相乘。请问在区间 [2333333, 23333333] 中有多少个正整数 可以被分解为 12 个质数相乘?
import java.util.ArrayList;
public class B数数 {
public static void main(String[] args) {
int start = 2333333;
int end = 23333333;
//list记录质数
ArrayList<Integer> list=new ArrayList<>();
//下标i 判断当前i可以是有几个质数相乘
int[] ispri=new int[end+1];
int ans=0;
for (int i = 2; i < end; i++) {
if (ispri[i]==0){
ispri[i]=1;
list.add(i);
}
//开始计数
if (i>=start&&ispri[i]==12){
ans++;
}
//埃氏筛法实例
for (int j = 0; j < list.size(); j++) {
Integer integer = list.get(j);
if (i*integer>end){
break;
}
ispri[i*integer]=ispri[i]+1;
}
}
System.out.println(ans);
}
}
一开始想直接暴力,md风扇开始响了都没结果,果断换方法
埃氏筛法变体,注意理解,ispri[]的含义,我写了注释,