代码1
int a,b,c,d;
cin>>a>>b>>c>>d;
int min;
min = c * 60 - a * 60 + d - b; //将时间全部转化为分钟,计算共用的分钟
cout<<min/60<<" "<<min%60;
这里就是简单的将时间全都转化为当天0点的分钟后相减,很好理解,代码也很简单,运算上也只有一两步简单的加减乘除。
代码2
int start_h,end_h,start_m,end_m;
cin>>start_h>>start_m>>end_h>>end_m;
int hour = 0,min = 0; //定义用的小时和分钟 计时器
while(1>0)
{
start_m = start_m + 1; //过了1分钟
min = min + 1; // 计时1分钟
if (min == 60) //如果计时器达到60分钟
{
hour = hour + 1; //计时器小时数+1
min = 0; //计时器分钟数归0
}
if(start_m == 60) //当前时间分钟达到60
{
start_m = 0; //当前时间 分钟归0
start_h = start_h + 1; //当前时间小时+1
}
if (start_h == end_h && start_m == end_m) //当前时间达到指定结束时间
{
break; //跳出循环
}
}
cout<<hour<<" "<<min;
这段代码我是模拟了时钟的运行,用了每次循环加1分钟的方式来计算时间。除了循环还有各种条件的判断,代码更加复杂。
我直觉上代码1的运行效率应该更高,但是实际从洛谷编译运行的时间来看,代码2比1运行效率有将近30%的提升,请大神给与指点。