题解P8665
结尾附赠辅助调试代码!
题目传送门
Part 1:阅读与理解+分析
题意:给你去程和反程的起降当地时间,让你求飞行时间(两次飞行时间相等)。
设
将
将
所以我们不需要知道时差就可以得出实际飞行时间。
Part 2:代码实现
这道题的实现方法主要在进行时间相关运算,我想出来了两种方法:
- 第一种:将所有时间转换成秒,再进行运算(经计算,最多只会有
23\times3600+59\times60+59=86399s 。所以不用开long long)。 - 第二种:定义一个结构体:有三个成员变量:
h,m,s ,分别代表着小时数、分钟数和秒数,再进行运算。
很明显,第一种方法更容易实现,但我还是两种方法都写了。
(代码见文末)
这里再说一下如何最简单地输入和输出时间:
- 输入:用
scanf("%d:%d:%d", &hour, &min, &sec);,输入降落时间时若发现读入完时间后getchar() != "\n"再用scanf("+(%d)", &day);读入天数。 - 输出:用
printf("%02ld:%02ld:02ld", hour, min, sec);。其中%02ld的意思是:一个整数,若小于两位数则在首位前补零直到等于两位数。
Part 3:总结+代码
本体的难点在于:
- 题目较长,需耐心读题。
- 时间的输入输出较麻烦,使用技巧(
scanf和printf)可以更方便。
代码(含辅助调试代码)
Ps:这是蒟蒻的第 4 篇题解。