#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;//华丽结束
}
欢迎大家指出错误
标签:知识点,30,int,题解,31,Friday,USACO1.1,373 From: https://www.cnblogs.com/ABBAawa/p/17153827.html