找规律,1900的一月一日是星期last = 1,那么1月13日是星期((13 - 1)% 7 + last) = 6;last = 6;因为一月有31天,所以1月13离2月13是31天, 2月13日是星期 (31 % 7 + last) % 7 = 2; last = 2;以此类推。
/**
LANG: C++
PROG: friday
ID: grttman1
**/
#include <iostream>
#include <fstream>
#include <string>
#include<cstring>
using namespace std;
const int maxn = 400 + 5;
const int s = 1900;
int day[8];
int month[13] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
freopen("friday.in","r",stdin);
freopen("friday.out","w",stdout);
int n;
while(scanf("%d", &n) == 1)
{
memset(day, 0, sizeof(day));
int last = 6;
for(int i = 0; i < n; i++)
{
int year = s + i;
if(year % 4 == 0 && year % 100 != 0 || (year % 400 == 0))
{
month[1] = 29;
}
else month[1] = 28;
for(int j = 1; j < 12; j++)
{
last = (month[j - 1] % 7 + last) % 7;
day[last]++;
}
if(i != n - 1)
{
last = (month[11] % 7 + last) % 7;
day[last]++;
}
}
day[6]++;
printf("%d %d %d %d %d %d %d\n", day[6], day[0], day[1], day[2], day[3], day[4], day[5]);
}
return 0;
}