洛谷P1202 黑色星期五Friday the Thirteenth

传送门

题目描述

1313 号又是一个星期五,那么 1313号在星期五比在其他日子少吗?

为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出 nn 年的一个周期,要求计算 19001900 年 11 月 11 日至 1900+n-11900+n−1 年 1212 月 3131 日中十三号落在周一到周日的次数。

这里有一些你要知道的:

1、19001900 年 11 月 11 日是星期一。

2、4,6,114,6,11 和 99 月有 3030 天,其他月份除了 22 月都有 3131 天,闰年 22 月有 2929 天,平年 22 月有 2828 天。

3、年份可以被 44 整除的为闰年 ( 1992=4*4981992=4∗498 所以 19921992 年是闰年,但是 19901990 年不是闰年 )。

4、以上规则不适合于世纪年。可以被 400400 整除的世纪年为闰年,否则为平年。所以,1700,1800,1900,21001700,1800,1900,2100 年是平年,而 20002000 年是闰年。

输入格式

一个正整数 nn。

输出格式

依次输出周六、日、一、二、三、四、五在 1313 日出现的次数。

输入输出样例
输入 #1复制
20
输出 #1复制
36 33 34 33 35 35 34

说明/提示

【数据范围】
对于 100%100% 的数据,1\le n \le 4001≤n≤400。
题目翻译来自NOCOW。
USACO Training Section 1.1

上代码:

#include<bits/stdc++.h>
using namespace std;
int n,xin=6;
int yue[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}/*记录每月的天数*/,ans[6];
bool run(int nian){//函数判闰年
	if(nian%400==0)
	   return true;
	if(nian%100==0)
	   return false;
	if(nian%4==0)
	   return true;
	return false;
}
int main(){
	cin>>n;
	for(int i=1900;i<=1900+n-1;i++){//按思路循环
		for(int j=1;j<=12;j++){
			xin+=yue[j];
			if(j==2)
			   if(run(i))
				  xin++;
			xin%=7;
			ans[xin]++;
		}
	}
	cout<<ans[6]+1<<" "<<ans[0]<<" "<<ans[1]<<" "<<ans[2]<<" "<<ans[3]<<" "<<ans[4]<<" "<<ans[5]<<" "<<endl;//输出,ans[0]即为周日。
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值