问题描述:
根据y总的思路,通过转化为分钟计算,避免了复杂的多个判断语句。
首先声明最长时间不超过24h
只需考虑两种情况:比如开始时间是(7:20) 结束时间是(8:30)
开始时间等效于7*60+20=(第)440分钟,结束时间等效于8*60+30=(第)510分钟
经过了510-440=70分钟 即1 hour 10min
但是,经过了的分钟数要大于0,前提是结束时间的h大于开始时间的h
如果开始时间是(7:20) ,那么如果结束时间在(7:20)到(24:00)的范围内,都是可以这么计算的。
但如果结束时间落在(0:00)到(7:20)那么意味着开始时间从(7:20)经过了24:00,再从0:00到达结束时间,所以真正经过的分钟数
为(24*60-starttime对应的分钟数)+endtime对应的分钟数
综上:经过的时间=endtime-starttime(对应的分钟数) if endtime-starttime>=0
经过的时间=1440-starttime+endtime(对应的分钟数) if endtiime-starttime<0
C++
#include <cstdio> #include <iostream> using namespace std; int main(){ int a,b,c,d,starttime,endtime; cin>>a>>b>>c>>d; starttime=a*60+b; endtime=c*60+d; if (starttime<endtime) cout<<"O JOGO DUROU "<<(endtime-starttime)/60<<" HORA(S) E "<<(endtime-starttime)%60<<" MINUTO(S)"; else cout<<"O JOGO DUROU "<<(1440+endtime-starttime)/60<<" HORA(S) E "<<(1440+endtime-starttime)%60<<" MINUTO(S)"; }
python:小郑三行解决(不建议这么写,为了突显短而短没必要,不好理解反而)
a,b,c,d=map(int,input().strip().split()) start,end=a*60+b,c*60+d print("O JOGO DUROU %d HORA(S) E %d MINUTO(S)"%((end-start)/60,(end-start)%60)) if start<end else print("O JOGO DUROU %d HORA(S) E %d MINUTO(S)"%((1440+end-start)/60,(end-start)%60))
推荐写法:一步步写清晰了就是好代码
a,b,c,d=map(int,input().strip().split()) start=a*60+b end=c*60+d if start<end: print("O JOGO DUROU %d HORA(S) E %d MINUTO(S)"%((end-start)/60,(end-start)%60)) else: print("O JOGO DUROU %d HORA(S) E %d MINUTO(S)"%((1440+end-start)/60,(end-start)%60))
我是小郑 正在奔赴热爱奔赴山海!