2018年蓝桥杯软件类省赛(软件类)C/C++大学A组第6题 ——“航班时间”
发布日期:2021-06-27 12:55:31
浏览次数:35
分类:技术文章
本文共 3106 字,大约阅读时间需要 10 分钟。
航班时间
一、题目描述
已知从A地飞往B地,再从B地返回A地的起飞和降落时间(当地时间),计算单程飞行时间。注意有时差。
输入:
一个输入包含多组数据。
输入第一行为一个正整数T,表示输入数据组数。 每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。 起降时间的格式如下h1:m1:s1 h2:m2:s2
h1:m1:s1 h3:m3:s3 (+1) h1:m1:s1 h4:m4:s4 (+2)
表示该航班在当地时间h1时m1分s1秒起飞,
第一种格式表示在当地时间 当日 h2时m2分s2秒降落 第二种格式表示在当地时间 次日 h3时m3分s3秒降落。 第三种格式表示在当地时间 第三天 h4时m4分s4秒降落。 对于此题目中的所有以 h: m : s 形式给出的时间, 保证 ( 0<=h<=23, 0<=m,s<=59 ). 保证输入时间合法,飞行时间不超过24小时。Ⓜ️ 😒输出:
对于每一组数据输出一行一个时间hh:mm:ss,表示飞行时间为hh小时mm分ss秒。 注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写为03:04:05。样例输入:
317:48:19 21:57:2411:05:18 15:14:2317:21:07 00:31:46 (+1)23:02:41 16:13:20 (+1)10:19:19 20:41:2422:19:04 16:41:09 (+1)
样例输出:
04:09:0512:10:3914:22:05
二、题解
本题的逻辑不复杂,主要考核输入和输出。
(1)飞行时间的计算 设起飞时间是S,到达时间是E,单程飞行时间是X,时差是T。 从A到B:S1+X+T=E1 从B到A:S1+X-T=E2 整理两式得:2X=(E1-S1) + (E2-S1),答案就是X。 可见,并不需要计算时差T,因为一去一回,互相抵消了。(2)输入输出
这是本题考核的主要内容。不同语言的实现见下面的代码。
三、编码实现
3.1、C语言代码
C风格的输入输出。注意scanf()和printf()的使用。
%d是整型输出格式。02的意思是如果输出的整型数不足两位,左侧用0补齐
#includeint get_time(){ int h1,h2,m1,m2,s1,s2; scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2); //读时间 int day = 0; //处理跨天 if((getchar())!='\n') scanf("(+%d)",&day); int S = h1*3600 + m1*60 + s1; //起飞时间:转为秒 int E = h2*3600 + m2*60 + s2; //到达时间:转为秒 return E - S + day*24*3600; //返回秒}int main(){ int n; scanf("%d",&n); while(n--){ int ans =(get_time() + get_time())/2; printf("%02d:%02d:%02d\n",ans/3600,ans/60%60,ans%60); //时:分:秒 } return 0;}
3.2、C++语言代码
用C++的string读取和处理字符串,用getline()一次读取一行。
#includeusing namespace std;int get_time(){ string line; getline(cin, line); //读一行 if(line.back() != ')') line += " (+0)"; int h1, m1, s1, h2, m2, s2, day; sscanf(line.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &day); int S = h1*3600 + m1*60 + s1; //起飞时间:转为秒 int E = h2*3600 + m2*60 + s2; //到达时间:转为秒 return E - S + day*24*3600; //返回秒}int main(){ string line; getline(cin, line); int n; sscanf(line.c_str(), "%d", &n); //读第一行的组数n while(n--) { int ans =(get_time() + get_time())/2; printf("%02d:%02d:%02d\n",ans/3600,ans/60%60,ans%60); //时:分:秒 }}
3.3、Java代码
Java可以直接用Date处理时间。
import java.util.*;import java.io.*;import java.text.*;public class Main{ private static Scanner sc = new Scanner(System.in); public static void main(String[] args) throws ParseException{ int n = sc.nextInt(); sc.nextLine(); for(int i = 0; i
3.4、Python代码
看看Python如何处理一行字符串。
def get_time(): line = str(input()).split(' ') #一行字符串,以空格分开,分别读取 h1=int(line[0][0:2]) #处理字符串中的数字 m1=int(line[0][3:5]) s1=int(line[0][6:8]) h2=int(line[1][0:2]) m2=int(line[1][3:5]) s2=int(line[1][6:8]) day = 0 if(len(line)==3): #line中有3个元素,最后一个是day day = int(line[2][2]) S = h1*3600 + m1*60 + s1 E = h2*3600 + m2*60 + s2 return E - S + day*24*3600 n = int(input())for i in range(n): ans = (get_time()+ get_time())/2 hh = int(ans/3600) mm = int(ans/60%60) ss = int(ans%60) print("{:0>2d}:{:0>2d}:{:0>2d}".format(hh,mm,ss))
输出:
转载地址:https://blog.csdn.net/weixin_43452424/article/details/113852274 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月18日 19时18分51秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
调节学习率的不同策略
2019-04-26
np.ascontiguousarray(array)
2019-04-26
from scipy import misc 读取和保存图片
2019-04-26
关于Batch Normalization
2019-04-26
关于PGGAN
2019-04-26
后台挂起,让服务器运行,客户端崩溃也可以继续运行
2019-04-26
SQL中的token含义
2019-04-26
网络的权重初始化示例
2019-04-26
python的各种推导式
2019-04-26
集合的运算关系
2019-04-26
Python的位置参数、默认参数、可变参数(*args)、关键字参数(**kwargs)
2019-04-26
匿名函数lambda
2019-04-26
git上传代码到远程仓库的命令行步骤
2019-04-26
Android解决网络加载大图片OOM的问题
2019-04-26
设计模式之单例模式
2019-04-26
JAVA的引用类型
2019-04-26
Android 解决Dialog导致软键盘无法隐藏的问题
2019-04-26