题目描述
读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。
其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。
请你计算游戏的持续时间。
比赛最短持续1分钟,最长持续24小时。
输入格式
共一行,包含四个整数A,B,C,D。
输出格式
输出格式为“O JOGO DUROU X HORA(S) E Y MINUTO(S)”,表示游戏共持续了X小时Y分钟。
数据范围
0≤A,C≤23,
0≤B,D≤59
输入样例1:
7 8 9 10
输出样例1:
O JOGO DUROU 2 HORA(S) E 2 MINUTO(S)
输入样例2:
7 7 7 7
输出样例2:
O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)
输入样例3:
7 10 8 9
输出样例3:
O JOGO DUROU 0 HORA(S) E 59 MINUTO(S)
我的算法
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
if(a==c&&b==d) cout<<"O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)";
else{
if(a<c){
if(b<=d)
cout<<"O JOGO DUROU "<<c-a<<" HORA(S) E "<<d-b<<" MINUTO(S)";
else
cout<<"O JOGO DUROU "<<c-a-1<<" HORA(S) E "<<60-b+d<<" MINUTO(S)";
}
else if(a>=c)
cout<<"O JOGO DUROU "<<23-a+c<<" HORA(S) E "<<60-b+d<<" MINUTO(S)";
}
return 0;
}
注意:此题中要将a=0和a>0放在一起,不能和a<0放在一起。有的题目等于0的情况和大于零小于零放在一起都可以,但这个题不行。
以后遇到等于0的情况要进行验证,不能随便放在一种情况里
那么有什么思路能避开上面的多层讨论呢?
将开始时间结束时间都转换成分钟,最后再转换成小时分钟
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
int x=a*60+b;
int y=c*60+d;
if(x==y)
cout<<"O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)";
else if(x<y)
cout<<"O JOGO DUROU "<<(y-x)/60<<" HORA(S) E "<<(y-x)%60<<" MINUTO(S)";
else
cout<<"O JOGO DUROU "<<(24*60-x+y)/60<<" HORA(S) E "<<(24*60-x+y)%60<<" MINUTO(S)";
return 0;
}
这种思路就省去了几种判断和进位问题,思路更加的简单,不易出错。