题目描述
blablabla
这里介绍一种C++的简单版代码,没有用到大佬们的字符串技巧c.str 以及stl
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int getTime(void)
{
int h1,m1,s1,h2,m2,s2,d=0;
scanf("%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d);
int time=d*24*3600+h2*3600+m2*60+s2-(h1*3600+m1*60+s1);
return time;
}
int main()
{
int t;
scanf("%d",&t);
for(int i = 0; i < t; i++)
{
int time1=getTime();
int time2=getTime();
int t=(time1+time2)/2;
printf("%02d:%02d:%02d\n", t/3600, t/60%60, t%60);
}
return 0;
}
${(+ %d )}$不匹配后就会跳过了
居然有这种 用法 秒~
这是什么原因吗
🐮🍺
简便好多 🐂
雀食比y总精简不少
scanf(“%d:%d:%d %d:%d:%d (+%d)”,&h1,&m1,&s1,&h2,&m2,&s2,&d);各位大佬,这个读取的时候没输入(+d)会如何?
那么d就为0啊
🐂🍺
我承认你是天才了
tql
for(int i = 0; i < t; i++)
{
int time1=getTime();
int time2=getTime();
int t=(time1+time2)/2;
这里是为什么啊?初学者有点看不懂
(time1+time2)/2 加的过程把时差抵消了,再除以二就是单程时间,学地理就好理解,从数据也能发现这个规律
orz
tql
牛逼呜呜
为什么
scanf(“%d:%d:%d %d:%d:%d (+%d)”,&h1,&m1,&s1,&h2,&m2,&s2,&d);
的(+%d)没有输入内容就可以忽略啊
tql%%%
tql
666666
%%%%%%%再看一眼我的50行代码 我感觉我是憨瓜
提交时可以AC,但是在别的编译器上运行时输入前两行数据后需要再输入一个别的数据才可以打印出结果,这是什么问题呢
第一组的结果出现在了第二组数据的第一行的后面
tql
为啥这些变量定义为全局变量就不对了呢
int h1,m1,s1,h2,m2,s2,d=0;
刚刚试了一下,是可以的呀
噢不好意思,我提交了一下发现有些样例确实过不了,主要原因在于全局变量定义了d=0,所以后面输入就会有问题,你可以具体看一下错误的那几个样例的特点
为啥d要初始为0呢
因为当隔天的话就会输入1或者2,不隔天就没有输入,所以初始化为0,如果没有另外输入的话就默认为不隔天
全局的话每次调用函数都是上次的值,已经不是0了可能
如果将d=0定义为全局变量,则在调用getTime()函数时,无法初始化d的值,输入没有给d赋值则d的值将取上一次输入给d赋的值。