-2

你如何使用python解决这个问题?

您将行李装入集装箱。一旦容器达到其极限(100 磅)。您移动到下一个容器。这就是您装载行李的方式。

当需要卸载数据时,您将首先卸载最后一个装载的集装箱(小于 100 磅。然后,您将卸下第一个装载的行李,然后是第二个,等等)然后您将移动到下一个集装箱.

如果问题不清楚。

这是加载数组的样子

假设我们有 3 个集装箱,这是装载安排

 [30,45,15,25,50,20,30,60]

该数组中的最后一项是第一个加载的。在第二个行李之后,第一个集装箱无法容纳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
4

1 回答 1

1

你需要考虑你的算法。
您正在创建基于 100 的 bin,因此构造它们然后解构以获得预期的输出。用作[-1]索引意味着总是添加到最后一个 bin 中bins

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]
于 2016-10-26T04:55:24.793 回答