转载请注明出处
摘要:模拟 ,闰年
13号又是一个星期五。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400.
这里有一些你要知道的:
1、1900年1月1日是星期一.
2、4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.
3、年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年).
4、以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,1700,1800,1900和2100年是平年,而2000年是闰年.
PROGRAM NAME:friday
INPUT FORMAT:
(friday.in)
一个正整数n.
OUTPUT FORMAT:
(friday.out)
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一...星期五的次数.
二. 题解
/*
ID: fightin1
LANG: JAVA
TASK: friday
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
public class friday {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new FileReader("friday.in"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("friday.out")));
int years = Integer.parseInt(br.readLine());
int[] count = new int[7];
int lastDay = 3;
for (int i=0;i<years;i++){
for (int j=1;j<=12;j++){
if (j==5||j==7||j==10||j==12){
lastDay = (lastDay+30)%7;
} else if(j==3) {
if (((1900+i)%4==0&&(1900+i)%100!=0)||((1900+i)%400==0))
lastDay = (lastDay+29)%7;
else
lastDay = (lastDay+28)%7;
} else {
lastDay = (lastDay+31)%7;
}
count[lastDay]++;
}
}
pw.println(count[6]+" "+count[0]+" "+count[1]+" "+count[2]+" "+count[3]+" "+count[4]+" "+count[5]);
pw.close();
br.close();
}
}

本文介绍了一个程序,用于计算闰年周期内从1900年1月1日至1900+N-1年12月31日中,每月13日落在周一至周日的次数。程序考虑了闰年规则,包括世纪年例外,通过模拟计算得出结果。
700

被折叠的 条评论
为什么被折叠?



