题目大意就是给出一个年份,求从1900年到这一年的每月13号落在一星期之中每天的次数。
注意要判断某年是闰年或者平年,因为这两种年份相同月的天数不一样的。
算出每个月13号距离初始日期的天数,然后再用求余运算确定星期几。
这个题主要用了枚举的思想。
#include<iostream>
using namespace std;
int judge(int year)
{
if(year%4==0&&year%100||year%400==0)
return 1;
return 0;
}
int run[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int week[7]={0,0,0,0,0,0,0};
int main()
{
int numyear,sumdays=0;
int i,j;
cin>>numyear;
for(i=1900;i<1900+numyear;i++)
{
if(judge(i))
{
for(j=1;j<=12;j++)
{
sumdays+=13;
week[sumdays%7]++;
sumdays+=(run[j]-13);
}
}
else
{
for(j=1;j<=12;j++)
{
sumdays+=13;
week[sumdays%7]++;
sumdays+=(ping[j]-13);
}
}
}
cout<<week[6]<<' ';
for(i=0;i<6;i++)
{
cout<<week[i]<<' ';
}
return 0;
}