原题链接
读取四个整数 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
using namespace std;
int main(void){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
int hour,min;
if(bd) {
min = (60-b)+d;
if (a
主要思路就是绕过小时和分钟这两个不同单位之间的换算,把两个时间全部换算为分钟制度,以此避免了借位这一头疼的问题。
具体解决又两个方法,个人更推荐第二种(也就是y总的处理方式)
#include
using namespace std;
int main(void){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
int t1,t2,t;
//t1为第一个时间换算为分钟
//t2为第二个时间换算为分钟
//t为相差时间的分钟
t1 = a*60+b;
t2 = c*60+d;
if(t1
//y总的代码 666 直接把目光放到对于spend_time的处理上
#include
using namespace std;
int main(void){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
int start,end,spend_time;
start = a*60+b;
end = c*60+d;
spend_time = end-start;
if(spend_time<=0) spend_time += 1440;
printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)",spend_time/60,spend_time%60);
return 0;
}