分析问题
小明从开始时间(a 时 b 分)游泳到结束时间(c 时 d 分),我们需要计算他总共游了多少小时和多少分钟。时间是24小时制,并且结束时间不会早于开始时间(因为是当天的活动)。为了便于五年级学生理解,我们可以把时间想象成“积木”:
- 时间单位转换:就像把小时换算成分钟一样。我们知道1小时 = 60分钟,所以:
- 开始时间总共的分钟数 =
a × 60 + b - 结束时间总共的分钟数 =
c × 60 + d - 游泳的总分钟数 = 结束分钟数 – 开始分钟数(因为结束时间更晚,所以结果不会是负数)
2.分钟转小时和分钟:总分钟数可能很多,我们需要把它分成“整小时”和“剩余分钟”。例如:
- 总分钟数 ÷ 60 = 小时数(取整数部分)
- 总分钟数 % 60 = 分钟数(取余数部分,所以分钟数一定小于60)
建立模型
我们可以用简单的数学公式表示:
- 总分钟差 =
(c × 60 + d) - (a × 60 + b) - 游泳小时数
e= 总分钟差 ÷ 60(整数除法) - 游泳分钟数
f= 总分钟差 % 60(取余数)
例如,输入 12 50 19 10:
- 开始分钟:
12 × 60 + 50 = 770分钟 - 结束分钟:
19 × 60 + 10 = 1150分钟 - 总分钟差:
1150 - 770 = 380分钟 - 小时数:
380 ÷ 60 = 6(因为 60 × 6 = 360) - 分钟数:
380 % 60 = 20(因为 380 – 360 = 20) - 输出:
6 20
编写程序
下面是C++程序实现上述模型。程序会读取输入的四个整数,计算游泳时间,并输出结果。
#include <bits/stdc++.h>
using namespace std;
int main() {
// 输入开始时间的小时a、分钟b和结束时间的小时c、分钟d
int a, b, c, d;
cin >> a >> b >> c >> d;
// 计算开始时间和结束时间的总分钟数
int start_minutes = a * 60 + b;
int end_minutes = c * 60 + d;
// 计算总分钟差(游泳总分钟)
int total_diff = end_minutes - start_minutes;
// 计算小时数(整数除法)和分钟数(取余)
int e = total_diff / 60; // 小时
int f = total_diff % 60; // 分钟(一定小于60)
// 输出结果,e和f用空格隔开
cout << e << " " << f << endl;
return 0;
}
保存 编译 运行
程序说明
- 输入:程序读取四个整数
a,b,c,d,分别表示开始小时、开始分钟、结束小时和结束分钟。 - 计算总分钟:
start_minutes = a * 60 + b:把开始时间转换成分钟。end_minutes = c * 60 + d:把结束时间转换成分钟。
- 计算时间差:
total_diff = end_minutes - start_minutes,得到游泳的总分钟数。 - 转换小时和分钟:
e = total_diff / 60:总分钟除以60,得到小时数(整数部分)。f = total_diff % 60:总分钟除以60的余数,得到分钟数(保证小于60)。
- 输出:按格式输出
e和f。
测试样例
输入 12 50 19 10 时,程序输出 6 20,符合题目要求。你可以用其他时间测试,如:
- 输入
10 30 11 20:输出0 50(50分钟)。 - 输入
9 0 10 0:输出1 0(1小时整)。