如何使用python解决这个问题?
你把行李装进集装箱。一旦容器达到极限(100磅)。你移动到下一个容器。这样装行李。
卸货时,首先卸货最后装载的集装箱(小于100磅)。然后从里面取出第一个装载的行李,然后取出第二个,等等),然后移到下一个集装箱。
如果问题不清楚。
加载数组是这样的
假设我们有3个集装箱,这是装货安排
[30,45,15,25,50,20,30,60]
数组中的最后一项是第一个加载的。继第2个行李后,第1个集装箱又装不下20磅的行李,就放到了下一个集装箱。
20、50、25进入第二个,15、45、30进入最后一个。
当卸货的时候,我们从最后一个集装箱的第一个行李开始,并按此顺序移动。
因此卸载数组为
[15,45,30,20,50,25,60,30]
是否有一个函数可以将输入转换为输出?
请记住,每个集装箱必须保持在100磅以下。
有什么想法吗?
对不起,如果问题跑题了,这是我关于堆栈的第一个问题
谢谢!
以下是我目前所做的尝试:
A=[15,20,25,45,20,30,65]
output=[20,15,20,45,25,65,30]
def input_output(A):
for i in range(1,len(A)):
B=[]*len(A)
if A[-i]<100:
B[0]=A[-i]
B[i]=A[-i-1]+B[i-1]
if B[i]>100:
for j in range(1,i):
C=[]*len(A)
C[-i]=A[i-len(A)]# Need a subarray to get reversed.
#I don't feel this is going the right direction
# C is my intended output array
你需要考虑一下你的算法。
您正在创建基于100的箱子,因此构建它们,然后解构以获得预期的输出。使用[-1]
作为索引意味着总是添加到bins
中的最后一个bin:
A = [15,20,25,45,20,30,65]
bins = [[]]
for i in reversed(A):
if sum(bins[-1]) + i > 100:
bins.append([])
bins[-1].append(i)
>>> bins
[[65, 30], [20, 45, 25], [20, 15]]
所以你只需要将箱子翻转并压平,这可以通过多种方式完成:
>>> [a for b in reversed(bins) for a in b]
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> sum(reversed(bins), [])
[20, 15, 20, 45, 25, 65, 30]
# Or
>>> import itertools as it
>>> list(it.chain.from_iterable(reversed(bins)))
[20, 15, 20, 45, 25, 65, 30]