题目描述
一辆汽车加满油后可以行驶n千米。旅途中有k个加油站。若要使沿途的加油次数最少,请设计一个有效的算法。
输入
第一行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油,且在第0个加油站满油不算加油,第k+1个加油站表示目的地。(请处理到文件尾)
输出
最少加油次数。如果无法到达目的地,则输出“No Solution”。
样例输入 Copy
7 7 1 2 3 4 5 1 6 6
样例输出 Copy
4
while True:
try:
n, k = map(int, input().split())
distances = list(map(int, input().split()))
position = 0 # 当前汽车所耗油耗累积
refill_count = 0 # 加油次数
if max(distances) > n:
print("No Solution")
else:
for distance in distances:
if position + distance > n:#需要加油
refill_count += 1
position = distance
else:
position += distance#不需要加油
print(refill_count)
except EOFError:
break
首先要理解题目:
抓住重点:
1.汽车在加油站都会加满油:
所以无论汽车在哪个位置,当两个加油站之间的距离相差大于在加油站加满油后可行驶的距离n,那么肯定就无法到达目的地,输出"No Solution"
2.汽车不加油:当当前汽车所耗油耗累积+距离<=n:则不需要加油,更新当前汽车所耗油耗累积的值
3.汽车加油:当当前汽车所耗油耗累积+距离>n:则需要加油,将加油的次数+1,因为这个加的距离还没有走,所以更新当前汽车所耗油耗累积的值,并将其赋值为距离的值,此时才得以进行下一次迭代