读书人

求问上这段代码到底哪里耗时间了

发布时间: 2013-03-12 11:19:35 作者: rapoo

求问下这段代码到底哪里耗时间了
笨鸟在做HDU上的一道题:
编写一个函数,其功能是根据表示年月日的三个整型变量year,month和day计算并“返回”下一天的日期。函数名定位NextDay,形式参数及返回类型请自行设计。

我觉得思路还是比较清楚的,但改过去改过来这该死的编译器就是说Time Limited Exceeded求问上这段代码到底哪里耗时间了

求问下大神,我这代码到底哪里耗时间了


#include<iostream>
#include<cmath>
#include<conio.h>
#include<stdlib.h>
using namespace std;
void NextDay(int &year,int &month,int &day);
void Trans(int &year,int &month,int &day,char a[]);

int main()
{
char input[11],flag;
int year,month,day;
cin.getline(input,11);
Trans(year,month,day,input);
do
{
NextDay(year,month,day);
cout<<year<<"."<<month<<"."<<day<<endl;
flag=getch();
}while(flag!='#');
return 0;
}

void NextDay(int &year,int &month,int &day)
{
int Leap=abs(2012-year),month_temp=month,day_temp=day;
bool Leap_Flag = 0;
if(Leap%4 == 0)
{
Leap_Flag = 1;
}
switch (month_temp)
{
case 1:
{
if(day_temp==31)
{
day=1;
month=2;
break;
}
else
{
day++;
break;
}
}
case 2:
{
if(day_temp==29&&Leap_Flag==1 || day_temp==28)
{
day=1;
month=3;
break;
}
else
{
day++;
break;
}
}
case 3:
{
if(day_temp==31)
{
day=1;
month=4;
break;
}
else
{
day++;
break;
}
}
case 4:
{
if(day_temp==30)
{
day=1;
month=5;
break;
}
else
{
day++;
break;
}
}
case 5:
{
if(day_temp==31)
{
day=1;
month=6;
break;
}
else
{
day++;
break;
}
}
case 6:
{
if(day_temp==30)
{
day=1;
month=7;
break;
}
else
{
day++;
break;
}
}
case 7:
{
if(day_temp==31)
{
day=1;
month=8;
break;
}
else
{
day++;
break;
}
}
case 8:
{
if(day_temp==31)
{
day=1;
month=9;
break;
}
else
{
day++;
break;
}
}
case 9:
{
if(day_temp==30)
{
day=1;
month=10;
break;
}
else
{
day++;
break;
}
}
case 10:
{
if(day_temp==31)
{
day=1;
month=11;
break;
}
else
{
day++;
break;
}
}
case 11:
{
if(day_temp==30)
{
day=1;
month=12;
break;
}
else
{
day++;
break;
}
}
case 12:
{
if(day_temp==31)
{
day=1;
month=01;
year++;
break;
}
else
{
day++;
break;
}
}
}
}
void Trans(int &year,int &month,int &day,char a[])
{
char a1[4],a2[2],a3[2];


for(int i=0;i<10;i++)
{
if(i<=3)
{
a1[i]=a[i];
}
if(i>=5 && i<=6)
{
a2[i-5]=a[i];
}
if(i>7)
{
a3[i-8]=a[i];
}
}
year=atoi(a1);
month=atoi(a2);
day=atoi(a3);
}


[解决办法]
你的好复杂!!

//没有检验输入的合法性
#include <stdio.h>
void NextDay(int*y ,int* m, int* d)
{
int isleapyear = (!(*y % 100) &&(*y % 400) )
[解决办法]
!(*y % 4) ;
static char days[2][12] =
{
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
++*d;
if(*d > days[isleapyear][*m-1])
{
*d = 1;
++*m;
if(*m > 12)
{
*m = 1;
++*y;
}
}
}

int main()
{
int year,month,day, ch;
scanf("%d%d%d", &year, &month, &day);
while((ch = getchar()) != '#')
{
if(ch != '\n')
{
NextDay(&year,&month,&day);
printf("%d %d %d\n",year, month, day);
}
}
return 0;
}


[解决办法]
不要用switch,case直接定义数组
int day_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
如果是闰年day_of_month[1] = 29;
然后直接判断 day 是否等于day_of_month[month];

读书人网 >C++

热点推荐