实验2-2-9 计算火车运行时间 (15 分)
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
输入样例:
1201 1530
输出样例:
03:29
代码:
# include <stdio.h>
# include <stdlib.h>
int main() {
int start,end,x,y;
int hour,minute;
scanf("%d %d",&start,&end);
y = (end / 100) - (start / 100);
// 分钟可能借位
x = (end % 100) - (start % 100);
hour = (x >= 0) ?y:(y - 1);
minute = (x >= 0)?x:(x + 60);
printf("%02d:%02d",hour,minute);
return 0;
}
提交截图:

解题思路:
这道题应该是到目前为止最难的一题了,不过题目还可以更难——扩展到不是同一天甚至是跨年的,这道题仅仅考虑到了在同一天,首先我们使用/和%分别得到小时和分钟的整数值!
- 这时候发现当
end和start的小时的整数值相等时,结果是0,但是我们输出是00:XX的形式,所以这边使用了%02d意思是输出的整数是两位,当不足两位的时候左边补0 - 接着发现
minute有时候得出的是负数,比如1235 1401这种,在日常生活中我们需要借位,说我们在路上花费了多长时间,因此这边考虑在minute相减为负的时候再加上60,此时hour的值再减去1,经历的时间就是正确的结果了! - 因此我们这边使用了
C中唯一的三目运算符表达式1 ? 表达式2 : 表达式3,意思是表达式1成立的时候,我们的值是表达式2决定的,否则就是表达式3决定的!当然也可以使用传统的if——else if——else的形式,只不过代码相对多一些!

浙公网安备 33010602011771号