以下是一些已知信息,但是或许你需要自己做一些其他的调查。
⚫ 1900 年 1 月 1 日是星期一。
⚫ 30 天的月份有:9 月,4 月,6 月,1 1 月。
⚫ 此外的月份都是 31 天,当然 2 月除外。
⚫ 2 月在闰年有 29 天,其他时候有 28 天。
⚫ 年份可以被 4 整除的是闰年,但是不能 400 整除的世纪年(100 的整数倍年)除外。
求:20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了
当月的第一天?
答案:171
思路:通过题中信息可得知1901年1月1日是星期二,然后循环使用求余运算即可求得结果
代码如下:
//1901年1月1日是星期二
public static void main(String[] args) {
int[]a={0,31,28,31,30,31,30,31,31,30,31,30,31};//1~12月每月天数
int[]b=new int[7];
b[1]=1;//1901年1月1日是星期二
int t=1;
int m;
for(int i=1901;i<=2000;i++){
if(i%4==0&&i%400!=0) a[2]=29;
else a[2]=28;
for(int j=1;j<=12;j++){
if(i==2000&&j==12) break;//这种情况其实算的是2001年1月1日是星期几
m=a[j]%7;
b[(m+t)%7]++;
t=(m+t)%7;//每月的t根据上月首日是星期几来决定
if(t==6) System.out.println(i+"A"+(j+1));//输出当月第一天是星期天的时间
}
}
System.out.println(b[6]);
}
程序运行结果:
(由于输出项过多故运行结果并未截全)