1002. 【USACO题库】1.1.3 Friday the Thirteenth 黑色星期五

(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++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值