(Input: friday.in, Output: friday.out)
时间限制: 1 s 空间限制: 256 MB
题目描述
每月 13 号刚好落在星期五的情况,是不是一定比落在其他星期一~星期四,还有落在周末的这些情况少呢?为了回答这个问题,写一个程序来计算在连续的 n 年中,每月的 13 日落在星期一,星期二……星期日的次数。具体时间段从 1900 年 1 月 1 日到 1900+n-1 年 12 月 31 日。其中 n 是一个非负数且不大于 400。
需要注意的是:
- 1900 年 1 月 1 日是星期一。
- 4, 6, 9 和 11 月有 30 天,其他月份(除了 2 月)有 31 天。闰年 2 月有 29 天,平年 2 月有 28 天。
- 年份可以被 4 整除的为闰年(比如,1992=4×498 所以 1992 年是闰年,但 1990 年不是闰年)。
- 以上规则不适用于世纪年(即数字刚好为整百的年)。可以被 400 整除的世纪年为闰年,否则为平年。所以,1700,1800,1900 和 2100 年是平年,而 2000 年是闰年。
请不要调用程序语言提供的任何日期相关的内置函数。也请不要预先算好所有答案。
输入
从文件 friday.in
中读入数据。
一个整数 n。
输出
输出到文件 friday.out
中。
一行 7 个整数,代表 13 日是星期六,星期日,星期一……星期五的次数。
样例数据
输入 #1 复制
20
输出 #1 复制
36 33 34 33 35 35 34
提示
13 号星期五(又称黑色星期五,与黑色星期五购物日子不同,后者为感恩节后的第一个礼拜五)是指公历一个月份的第十三天恰好是星期五。在西方文化中,13 日星期五被认为是不幸的一天。在公历中,每年至少会有一次是某一个月的第 13 日正好是星期五,在同一年最多可发生三次。在日耳曼语族和罗曼语族国家的文化当中,十三号星期五被迷信者认为是不幸、不吉利的日子。在许多其他的文化当中也可见到类似的迷信,例如在希腊的文化也视“13 号星期五”为不吉利的一天。(来自维基百科)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool q(int a)
{
return(a%400==0||(a%100!=0&&a%4==0));
}
int w[10];
int main()
{
freopen("friday.in","r",stdin);
freopen("friday.out","w",stdout);
int n,s=0;
cin>>n;
for(int i=1900;i<=1900+n-1;i++)
{
if(q(i))m[2]=29;
else m[2]=28;
for(int j=1;j<=12;j++)
{
w[(s+13)%7]++;
s+=m[j];
}
}
cout<<w[6];
for(int i=0;i<=5;i++)cout<<" "<<w[i];
return 0;
}
运行语言:C++