page contents

python基础编程100例:第27期-拉力赛求最短时间

本文讲述了python基础编程100例:第27期-拉力赛求最短时间!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-WCJauWLo623145bae3608.png

本文讲述了python基础编程100例:第27期-拉力赛求最短时间!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第27期-拉力赛求最短时间

1 问题描述

在荒漠中举办拉力赛,为避免前车事故停车影响后车成绩,赛车分批出发。每隔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 405


2 解题思路

输入车的数量,使用input函数

输出最小时间及车辆,需要使用判断大小的方法

需要判断输入的时间是否符合时间格式,不符合则重新输入

可以考虑使用def创建函数


3 解题方法

def CarRace(m):

    min = 10000

    time = min1 = 0

    c = 1

    while c <= m:

        begin, end = map(int, input(f'请输入第{c}辆车出发及结束时间(中间用空格隔开):').split())

        if 0 <= begin // 100 <= 23 and 0 <= end // 100 <= 23 and 0 <= begin % 100 <= 59 and 0 <= end % 100 <= 59:

            if end % 100 - begin % 100 >= 0:

                time = end - begin

            else:

                time = end - begin - 40

            if time <= min and end // 100 < 16:

                min = time

                min1 = c

            c += 1

        else:

            print(f'您输入的第{c}辆车时间不正确,请重新输入')

    if min1 != 0:

        print(f'第{min1}辆车用时最短', end=',')

        print(f'其用时为{min},即{(min - min % 100) / 100}时{min % 100}分')

    else:print(-1)

m = int(input('请输入车的数量:'))

CarRace(m)

第1行: def创建车辆竞赛函数

第2行: 给最小值一个较大的值,保证下一个数一定可以比这个数小,如此便可以将其替换为第一个算出来的数

第3-4行: 定义time时间差以及min1为0,定义循环次数及车辆为i

第5行: 使用while循环判断是第几辆车正在计算

第6行: 定义begin和end变量,并输入两个整数类型的值返回到begin和end,输入值中间用空格隔开

第7行: 判断输入的值是否符合时间的格式

第8-11行: 若符合格式,对结束时间分钟小于开始时间分钟的情况需要进行时间转换(因为时间分钟是60分钟一个小时,不能直接减)

第12-14行: 若时间差time小于最小时间值min,则将time的值赋值给min,且定义min1,赋值其最小时间的车辆

第15行: 若时间输入格式正确,则输入下一辆车的时间

第16-17行: 对输入格式不正确的车辆,保证i值没有变化并打印提示用户重新输入

第18-20行: 当min1发生变化时,表示有车辆的时间是正确的并且输出最小时间

第21行: 当min1没发生变化时,表示没有车辆在指定时间之前到达,输出-1

第24-25行: 提醒用户输入车的数量,并引用函数


代码运行结果为:

attachments-2022-03-2gIyO70s6231456d4fdda.png

这里用到了map(int,input().split())函数,简单讲解下这个函数:

map()函数

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法:

map(function, iterable, ...)

参数说明:

function -- 函数

iterable -- 一个或多个序列

例如:map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) 输出:[3, 7, 11, 15, 19]

所以这里面的map(int,str())是将str里面的内容转换为int类型

str.split()函数

split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

语法:

str.split(str="", num=string.count(str)).

参数说明:

str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

num -- 分割次数。默认为 -1, 即分隔所有。


所以这里面的input().split()就是输入多个值,并用空格隔开,不过输入的值是字符串,所以需要用map函数转换为int类型

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-zzwJXPjX6291968d82961.jpeg

  • 发表于 2022-03-16 10:05
  • 阅读 ( 587 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章