实验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;
}

提交截图:

在这里插入图片描述

解题思路:

这道题应该是到目前为止最难的一题了,不过题目还可以更难——扩展到不是同一天甚至是跨年的,这道题仅仅考虑到了在同一天,首先我们使用/%分别得到小时和分钟的整数值!

  • 这时候发现当endstart的小时的整数值相等时,结果是0,但是我们输出是00:XX的形式,所以这边使用了%02d意思是输出的整数是两位,当不足两位的时候左边补0
  • 接着发现minute有时候得出的是负数,比如1235 1401这种,在日常生活中我们需要借位,说我们在路上花费了多长时间,因此这边考虑在minute相减为负的时候再加上60,此时hour的值再减去1,经历的时间就是正确的结果了!
  • 因此我们这边使用了C中唯一的三目运算符表达式1 ? 表达式2 : 表达式3,意思是表达式1成立的时候,我们的值是表达式2决定的,否则就是表达式3决定的!当然也可以使用传统的if——else if——else的形式,只不过代码相对多一些!
posted @ 2021-03-05 11:30  lures  阅读(1156)  评论(0)    收藏  举报