CCF真题之节日
201503-3
#include <iostream>
using namespace std;
bool lear(int year) {
if((year%4==0&&year%100!=0)||(year%400==0))
return true; else return false; }
int countDay(int year,int month,int day) {
int i,s,num=0;
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数
if(lear(year)) b[1]=29; //若为闰年,则修改第2个月份的天数
//统计1到year-1年之间有多少个闰年
for(i=1;i<year;i++) {
if(lear(i)) num++; }
s=(year-1)*365+num;
//year-1年底距离0年的总天数
for(i=0;i<month-1;i++)
s=s+b[i]; //第year年前month-1个月的天数
s=s+day;//再加上month这个月的天数
return s; }
int main() {
int i,m,n,d,y1,y2,cday,cweek,dd;
//int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数 cin>>m>>n>>d>>y1>>y2;
for(i=y1;i<=y2;i++) {
//一直90分,原因,数组初始化在for循环外面 ,故若为闰年,a[1]的值会不断增1
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的天数
if(lear(i)) a[1]=29;
//i年m月1日距离1850年1月1日多少天
cday=countDay(i,m,1)-countDay(1850,1,1);
cweek=cday%7+2;
// i年m月1日为周几
if(d>=cweek)
dd=1+(d-cweek)+(n-1)*7; //首先计算i年m月的第一个星期几为几号,再计算第几个星期几为几号
else dd=1+(7-cweek)+d+(n-1)*7;
if(dd>a[m-1]) cout<<"none"<<endl;
else {
cout<<i<<"/";
if(m<10) cout<<"0"<<m<<"/";
else cout<<m<<"/";
if(dd<10) cout<<"0"<<dd<<endl;
else cout<<dd<<endl;
}
}
}