黑色星期五属于取余的稍微难点的题目,比较简单的思路就是一个月一个月的推算每个月的13号是星期几,即
1月份的13号由上一年的12月的13号和上一年12月的天数推出
2月份的13号有今年的1月分的13号和今年的1月份的天数推出
3月份的13号由今年的2月份的13号和今年的2月份的天数推出
....................以此类推就可以了,只要注意一下今年的2月份的天数就可以了
注意输出顺序为 6 7 1 2 3 4 5
/*
ID: zhuihun1
PROG: friday
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
bool RunYear(int year)
{
if(year%100==0&&year%400==0)
return true;
else if(year%100!=0&&year%4==0)
return true;
return false;
}
int main()
{
ofstream fout ("friday.out");
ifstream fin ("friday.in");
int ai[7];
memset(ai,0,sizeof(ai));
int n;
fin>>n;
int t=2;
for(int i=0;i<n;i++)
{
t=(t+31%7)%7;ai[t]++; //一月
t=(t+31%7)%7;ai[t]++;//二月
if(RunYear(1900+i)) t=(t+29%7)%7; //三月
else t=(t+28%7)%7;
ai[t]++;
t=(t+31%7)%7;ai[t]++; //4月
t=(t+30%7)%7;ai[t]++; //5月
t=(t+31%7)%7;ai[t]++; //6月
t=(t+30%7)%7;ai[t]++; //7月
t=(t+31%7)%7;ai[t]++; //8月
t=(t+31%7)%7;ai[t]++; //9月
t=(t+30%7)%7;ai[t]++; //10月
t=(t+31%7)%7;ai[t]++; //11月
t=(t+30%7)%7;ai[t]++; //12月
}
fout<<ai[5]<<" "<<ai[6];
for(int i=0;i<5;i++)
fout<<" "<<ai[i];
fout<<endl;
return 0;
}