weixin_51542019 2022-04-08 12:12 采纳率: 75%
浏览 38
已结题

Python帮助:能够这样做的最小油箱容量是多少?

米兰图斯克是宇宙中最富有的人。在毕生致力于推进我们的太空探索技术之后,他终于准备好退休了。作为一名太空爱好者,他想做的第一件事就是依次访问 n 颗行星 p1、p2、……、pn。他目前在 p0 星球上。

米兰知道行星 pi 和 pi + 1 之间的距离(对于 0 ≤ i < n)是 d[i] 光年。他的宇宙飞船每光年使用 1 吨化石燃料。他从一个满的油箱开始,可以在 n 颗行星中的任何一个上加满油箱(但他不能在两个行星之间用完)。建造宇宙飞船进行燃料补给的成本很高。由于经济拮据(他没那么富有),他最多可以加满油箱 k 次。

为了省钱并使他的飞船更轻,米兰正在寻找最小的油箱,使他能够完成他的太空旅行并到达行星 pn。使他能够这样做的最小油箱容量是多少?

Input

Input由两行组成:
第一行包含由单个空格分隔的 n 个整数。这些数字指定了列表 d。
第二行包含一个整数 k。

Output

输出一个整数:米兰飞船的最小油箱容量(以吨为单位)。

限制

1 ≤ n ≤ 100
0 ≤ k ≤ 100
1 ≤ d[i] ≤ 100

时间限制

您的程序必须在任何有效输入的 1 秒内完成运行。

Sample Input 1

2 1 1
3

Sample Output 1

2

Sample1 解释

容量至少应为2;否则,米兰无法从 p0 移动到 p1。
如果容量是 2,米兰可以简单地在 p1 上填满他的油箱。请注意,在他加满油之前,他的油箱是空的,但这没关系,因为他已经在 p1 上。

Sample Input 2

1 1 1 1 1 1 1
2

Sample Output 2

3

Sample Input 3

5 5 5 5
4

Sample Output 3

5

我的大致思路是这样的

最多有100个输入,并且每两个加油站的距离小于等于100,所以我们可以判断出,最大距离为 100 * 100 = 10000
那不论k值为多少,最后的答案的取值范围一定是0 ~ 10000
正着来
从前往后loop每一个答案,
当答案为n时,需要加几次油?
当你第一次找到 需要加 <= k 次油的时候,说明你找到答案了,返回n值。

但是不知道该怎么用代码表达
无力跪
总感觉好复杂

我的代码:
current_fuel_in_tank = capacity_of_tank
refuelling_required = 0
n = len(d)
for i in range(0,n-1):
current_fuel_in_tank -= d[i]
if(current_fuel_in_tank < d[i+1]):
refuelling_required += 1
current_fuel_in_tank = capacity_of_tank

  • 写回答

1条回答 默认 最新

  • 溪风沐雪 2022-04-08 16:42
    关注
    
    import math
    def min_volume(dists, k):
        dists_arr = dists.split(' ') #数字字符串分割成数组
        dist_numbers = list(map(int, dists_arr)) #数字字符串数组转为数字数组
        max_dist = max(dist_numbers) #计算行星间距离最大值max_dist
        dist_total = sum(dist_numbers) #计算总的行程dist_total
        #邮箱容积volume不得小于max_dist,否则会半路没油
        #假设volume为max_dist,看开始满油+k次油(即k+1箱油)是否足以完成总行程
        #能够完成,那么volume=max_dist
        if max_dist*(k+1)>=dist_total: 
            volume = max_dist
            return volume
        #不能够完成的话,总行程dist_total/总加油次数k+1,就是邮箱最小容积(math.ceil函数向上取整)
        else:
            volume = math.ceil(dist_total/(k+1))
            return volume
    dists = '2 1 1'
    k = 3
    volume = min_volume(dists, k)
    print('dists:',dists, '  k:', k, ' volume:', volume)
    dists = '1 1 1 1 1 1 1'
    k = 2
    volume = min_volume(dists, k)
    print('dists:',dists, '  k:', k, ' volume:', volume)
    dists = '5 5 5 5'
    k = 4
    volume = min_volume(dists, k)
    print('dists:',dists, '  k:', k, ' volume:', volume)
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 已采纳回答 4月21日
  • 修改了问题 4月8日
  • 修改了问题 4月8日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效