前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python|拉力赛求最短时间问题解法

python|拉力赛求最短时间问题解法

作者头像
算法与编程之美
发布2019-12-24 12:19:43
4630
发布2019-12-24 12:19:43
举报
文章被收录于专栏:算法与编程之美

问题描述

在荒漠中举办拉力赛,为避免前车事故停车影响后车成绩,赛车分批出发。每隔5分钟出发10辆车,每辆赛车在通过起点和终点时都会独立计时。默认所有赛车完赛的正常耗时都在8小时以内。比赛从早上8点开始,下午4点全部结束,这时还没到终点的车辆不记到达成绩。现在得到了所有赛车的单独计时起止时间,请输出耗时最少的车辆编号(从1开始,顺序编号)和所用耗时。 输入说明:第一行是一个整数N,表示参加赛事的赛车数量。之后是N行,每行表示一辆赛车的单独计时时间,时间给出方式为小时+分钟的形式,如0830 1210表示8点30分通过起点,12点10分通过终点。 输出说明:耗时最少车辆的序号及所有耗时(用分钟表示),中间用空格分开,(如果所有赛车都没有完赛,输出-1) 输入样例: 6 0800 1210 0805 1320 0810 1215 0815 1300 0820 1310 0905 1430 输出样例: 3 245

解决方案

先从输入输出格式进行观察,如何才能满足第一行是一个整数N,表示参加赛事的赛车数量,之后是N行,每行表示一辆赛车的单独计时时间。我们可以使用一个while循环,当输入的行数没到N时,我们就任然需要向下输入,知道下面的行数到N为止。

再根据题目要求,求出两个时间之间的间隔,已知0800表示8:00,1210表示12:10,我们分别可以提取0800和1210前两位和后两位来计算总分钟数,例如上面一组数中,相隔时间为(12-8)*60+10=250分钟。这样分别求出每组间隔时间。我们把每组间隔时间加入一个列表,求出最短时间,并在另一个列表相对应的位置插入序号,本题就解决了。

python代码

N = int(input()) n = 0 lis = [] while N > n: n += 1 m = list(map(str,input().split()))#字符串方便分裂 lis.append(m)#上面代码控制输入格式 xu = 0 li = [] lu = [] for i in lis: xu+=1 xiaoshi = int(i[1][0:2])-int(i[0][0:2]) fenzhong = int(i[1][2:])-int(i[0][2:]) zong = xiaoshi*60+fenzhong#通过分裂来求时间 lu.append(xu) li.append(zong) if min(li) > 480: print(-1) else: print('{} {}'.format(lu[li.index(min(li))],min(li)))

结语

当我们解决这类编程题时,我们要先从输入输出格式方向进行思考,注意区分行和列,遇到多个数据我们基本上是可以通过创建列表来找关系解决。

END

实习编辑 | 张祯悦

责 编 | 刘仕豪

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档