题目描述
读入两个用“时:分:秒”表示的时间点,计算以秒为单位的时间间隔。
输入
输入有两行,每行是一个用“时:分:秒”表示的时间点。测试数据保证第二个时间点晚于第一个时间点。
输出
输出一个整数,表示时间间隔的秒数。
样例输入
08:00:00
09:00:00
样例输出
3600
解题思路:直接两个时间的时分秒相减乘以相应的倍数即可
比如08:55:56和09:02:03
时:(9-8)*3600=3600
分:(2-56)*60=-3240
秒:3-56=-53
相加:3600-3240-53=307
总的来说,如果说小时级别相差两个小时,那必定可以凑出一个整的小时来,如果相差三个小时,那至少可以凑出两个整的小时,剩下一个小时可能是完整的(给的数据比如是08:00:00到11:00:00)也有可能不是完整的,现在假设是完整的3600秒,然后再将分钟和秒按照大小各自排列,他们的整数差就是这凑出来的一个小时中实际上并没有度过的,需要减去,结果就是时间差。
比如:08:26:38和10:11:45
10-8=2,小时级别为2,则就按两个小时算2*3600=7200秒
我们可以看到,虽然小时级别为2,但是我们只能凑出一个完整的小时来,08:26:38到09:26:38是完整的一个小时,但是从09:26:38到10:11:45是不够一个小时的,但是小时级别我们的差是2,现在假设是完整的两个小时,那么完整的第二个小时应该是从09:26:38到10:26:38,然后找到中间实际上没有度过的时间减掉即可
本来实验数据是到10:11:45,但是我们假设的是两个完整的小时,时间上10:11:45到10:26:38这一段时间是假的,所以要减去,
所以分钟级别是:(11-26)*60= -900
这样我们把分钟的假时间减掉以后,就剩下秒了。是10:26:45到10:26:38的秒差
然后是秒级别:38到45是有7秒的假时间
38-45=-7
所以时间差为:7200-900-7=6293
上代码:
#include<stdio.h>
#include<math.h>
int main(){
int h[2],m[2],s[2];
for(int i=0;i<2;i++)
scanf("%d:%d:%d",&h[i],&m[i],&s[i]);
int a=(h[1]-h[0])*3600;
//b的值可能是正的也可能是负的
int b=(m[1]-m[0])*60;
//c的值可能是正的也可能是负的
int c=(s[1]-s[0]);
printf("%d\n",a+b+c);
return 0;
}
思路上是用了先补齐,然后再减去的思想
其他人有用直接算出两个时间从00:00:00开始经过的秒数相减,这样的思路比较简单
#include <stdio.h>//简单题就不用数组了
#include<math.h>
int main()
{
int h1,h2,m1,m2,s1,s2,sec1,sec2;
scanf("%d:%d:%d",&h1,&m1,&s1);
scanf("%d:%d:%d",&h2,&m2,&s2);
sec1=h1*3600+m1*60+s1;
sec2=h2*3600+m2*60+s2-sec1;
printf("%d\n",sec2);
return 0;
}