#373. 「USACO1.1」Friday the Thirteenth 题解
Posted ABBAawa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#373. 「USACO1.1」Friday the Thirteenth 题解相关的知识,希望对你有一定的参考价值。
#373. 「USACO1.1」Friday the Thirteenth 题解
题目传送门
题目知识点
模拟+数学
闰年知识点
题意说明
写一个程序来计算在n年里13日落在星期一,星期二......星期日的次数。这个测试从1900年1月1日到1900+n-1年12月31日.n是一个非负数且不大于400。请不要预先算好数据!
很明显,这道题会考察到和年份有关的知识点(已在知识点中列出,欢迎查阅),但是总结一下就是四年一闰,百年不闰,四百年又闰。(不会的话去问小学老师)
代码+解释
#include<bits/stdc++.h>//伟大的万能头文件
using namespace std;
int a[13]=0,31,28,31,30,31,30,31,31,30,31,30,31,b[8];//a数组预处理每月天数,b数组用来存储答案
int main()
int n,c=0;
cin>>n;
for(int i=1900;i<1900+n;i++)
int f=0;//闰年标记
if((i%4==0)&&(i%100)||(i%400==0))
f=1;//判断是否为闰年,若成立则f赋值为真
for(int j=1;j<=12;j++)
int e=0;//如果为闰年,2月就要多一天,e在闰年情况下使2月的循环变量增大1
if(f&&j==2)
e=1;
for(int k=1;k<=a[j]+e;k++)//k循环日期,m[j]即j月的天数
c++;//st每天增加
if(k==13)
b[c%7]++;
//防抄袭
if(e==1)
e=0;//2月用过后要清零
cout<<b[6]<<" "<<b[0]<<" "<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<" "<<b[5];//输出顺序是Sat Sun Mon Tue Wed Thu Fri
return 0;//华丽结束
欢迎大家指出错误
以上是关于#373. 「USACO1.1」Friday the Thirteenth 题解的主要内容,如果未能解决你的问题,请参考以下文章
P1202 [USACO1.1]黑色星期五Friday the Thirteenth
November 25th 2016 Week 48th Friday
November 11th 2016 Week 46th Friday
June 30th 2017 Week 26th Friday