2023年蓝桥杯 省赛 ————特殊日期
2.特殊日期 - 蓝桥云课
错误原因:
分不清大小月,将闰年的2月天数当成了28天,非闰年当成了27天,因此出错
错误代码如下:
package Lanqiao;
import java.util.Scanner;
/**
* @author zb
* date2025/3/16 13:22
*/
public class L3495 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int count = 0 ;
int m[] = {0,31,27,31,30,31,30,31,30,31,31,30,31};
for (int i = 2000; i <=2000000 ; i++) {
for (int j = 1; j <=12 ; j++) {
// 判断闰年,如果是闰年的话就给二月增加一天
if(i%400==0||(i%4==0&&i%100!=0)){
if(j==2){
m[j] =28;
}
}
for (int k = 1; k <=m[j] ; k++) {
if(i%j==0&&i%k==0){
count++;
}
if(i==2000000){
i = 2000001;
j = 13;
break;
}
}
}
m[2] =27;
}
System.out.println(count);
in.close();
}
}
看了一遍解析之后又错了,少了个=号
package Lanqiao;
/**
* @author zb
* date2025/3/16 13:42
*/
public class L3495 {
public static void main(String[] args) {
// 记录每个月有多少天
int []m = {0,31,28,31,30,31,30,31,31,30,31,30,31};
// 记录数量
int count = 0 ;
// 年
for (int i = 2000; i <2000000 ; i++) {
// 判断闰年,闰年给2月+1天
if(i%400==0||(i%4==0&&i%100!=0)){
m[2] = 29;
}
// 月份
for (int j = 1; j <=12 ; j++) {
// 日期
for (int k = 1; k <=m[j] ; k++) {
if(i%j==0&&i%k==0){
count++;
}
// 退出循环的条件2000000年1月1日
// 因为年和月的循环条件分别是<=2000000和<=12
if(i==2000000&&j==1&&k==1){
i=2000001;
j = 13 ;
break;
}
}
}
// 默认下一年不是闰年
m[2] =28;
}
System.out.println(count);
}
}
把j<2000000改成<=2000000
会了也做不对