愿尔安然无恙


私信TA

用户名:H2130819045

访问量:13765

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 63
经  验 10710
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

TA的其他文章

思路参考注释

参考代码:

#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 人评分

  评论区

  • «
  • »