2017-5-23
题目大意:
给定数字N (1<=N<=400),计算1900年到1900+N-1年里,每个月的13号出现在周六、周日、周一、……周五的次数。并按顺序输出。
样例输入:
20
样例输出:
36 33 34 33 35 35 34
题解:
日期年月日判断星期几的公式
int week[]={1,2,3,4,5,6,7};
cin>>y>>m>>d;
if(m<3)
{
m=m+12;
y–;
}
w=(y+y/4+y/400-y/100+2*m+3*(m+1)/5+d)%7;
暴力枚举每一年的每一个月,计算即可。
代码:
C++
/*
ID: ducongj1
PROG: friday
LANG: C++
*/
#include<fstream>
#include<cstring>
using namespace std;
int main(){
ifstream fin("friday.in");
ofstream fout("friday.out");
int a[7];
int n;
memset(a,0,sizeof(a));
fin>>n;
for(int year=1900;year<1900+n;year++){
for(int mon=1;mon<=12;mon++){
int y=year;
int m=mon;
int d=13;
if(m<3)
{
m=m+12;
y--;
}
int w;
w=(y+y/4+y/400-y/100+2*m+3*(m+1)/5+d)%7;
switch(w+1){
case 6:a[0]++;break;
case 7:a[1]++;break;
case 1:a[2]++;break;
case 2:a[3]++;break;
case 3:a[4]++;break;
case 4:a[5]++;break;
case 5:a[6]++;break;
}
}
}
for(int i=0;i<6;i++){
fout<<a[i]<<" ";
}
fout<<a[6]<<endl;
return 0;
}