题目描述
读取四个整数 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)
暴力枚举, 举,就嗯举
时间复杂度15ms 空间占用208K
参考文献
C++ 代码
#include<iostream>
using namespace std;
int main()
{
int h1, m1, h2, m2, m, h;
cin >> h1 >> m1 >> h2 >> m2;
if (m2 > m1 && h2 > h1) m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S)" << endl; // 1.1
else if (m2 > m1 && h2 < h1) h2 += 24, m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S)" << endl; // 1.2
else if (m2 < m1 && h2 > h1) m2 += 60, h2 -= 1, m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 2.1
else if (m2 < m1 && h2 < h1) m2 += 60, h2 += 23, m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 2.2
else if (m2 == m1 && h2 > h1) m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 3.1.1
else if (m2 == m1 && h2 <= h1) h2 += 24, m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 3.1.2
else if (m2 >= m1 && h2 == h1) m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 3.2.1
else
{
if (m2 < m1 && h2 == h1) m2 += 60, h2 += 23, m = m2 - m1, h = h2 - h1, cout << "O JOGO DUROU " << h << " HORA(S) E " << m << " MINUTO(S) " << endl; // 3.2.2
}
return 0;
}
思路:首先计算分钟上的时差,如果结束时分钟数小于开始时则需向小时数借一小时
所以大体可先分为1.结束时分钟数大于开始时分钟数2.结束时分钟数小于开始时分钟数3.分钟数or小时数相等
1.1(分钟大于,小时大于)两者直接做差;1.2(分钟大于,小时小于)小时数+24后做差
2.2(分钟小于,小时大于)分钟数+60同时小时数-1后做差;2.2(分钟小于,小时小于)分钟数+60同时小时数+23后做差
3.1.1(分钟等于,小时大于)两者直接做差;3.1.2(分钟等于,小时小于等于)小时数+24后做差
3.2.1(分钟大于等于,小时等于)两者直接做差;3.2.2(分钟小于,小时等于)分钟数+60同时小时数+23后做差