思路参考注释
参考代码:
#include <iostream> using namespace std; int arr[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//保存每月的最后一天 int check(int j) { arr[2]=28; //非闰年,2月28天,若为闰年,重新赋值为29即可 if(j%4==0&&j%100!=0||j%400==0)//闰年处理,2月份为29天 { arr[2]=29; return 366; } return 365; } int main() { int year,birthyear,birthmonth,birthday,time; while(cin>>birthyear>>birthmonth>>birthday)//输入生年,生月,生日 { time=0; check(birthyear); //不需要返回值,但要判断是否为闰年,并为月份数组赋值 time+=arr[birthmonth]-birthday;//生月特殊计算,这个月的号数不等于天数,如15号生,16号与之相隔1天; for(int j=birthmonth+1;j<=12;j++)//该年,遍历生月之后的每个月 { time+=arr[j]; } for(int i=birthyear+1;;i++)///生年第二年开始是完整的年 { year=i; //保存每一年,(break)退出的时候,则为目标年份 time+=check(i);//10000天都是很多很多年之后的事了,在那之前算总天数就行 if(time>=10000)//第一个到达10000天的那一年,一定是我们要找的 break; } time-=check(year);//找到这一年,从第一天开始找,看看具体是哪天 for(int j=1;j<=12;j++)//该年,遍历每个月 { for(int k=1;k<=arr[j];k++)//遍历每一天 { time+=k;//这个月的号数代表这个月的天数,直接相加即可,下一次计算的时候记得清理掉之前加的号数 if(time==10000) cout<<year<<"-"<<j<<"-"<<k<<endl; if(k<arr[j])//统计完过后,要清理这一天,重新计算天数的时候要减去上一天的号数,如 1998,1,26(25-25+26=26天),而下一个月从1号开始,故上一个月的最后一天不用减,1998,2,1(31+1=32天) time-=k; } } } return 0; }//dongdong
0.0分
0 人评分