2016-10-26 40 views
-2

你如何使用python解决这个问题?使用python处理行李?最后一个容器,最后一个,第一个行李先出

将行李放入容器中。一旦容器达到其极限(100磅)。你移动到下一个容器。这是你如何加载行李。

当需要卸载数据时,首先卸载最后一个装载的容器(小于100磅),然后从中取出第一个装入的行李箱,然后移除第二个行李箱等)。然后,您将移动到下一个容器。

如果问题不明确。

这里是装阵的样子

假设我们有3个集装箱,这里曾是装载布局

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

此数组中的最后一个项目是第一个加载。第二个行李后,第一个集装箱不能容纳20lb的行李,因此进入下一个集装箱。

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 
+1

有你自己试过什么? –

+0

我曾试过考虑过它。该算法是有道理的,但我似乎无法实现它A = [15,20,25,45,20,30,65] B = [20,15,20,45,25,65,30] 对于i在范围(1,LEN(A)): B = [] * LEN(A) 如果A [-i] <100: B [0] = A [-i] B [i] = A [-i-1] + B [i-1] 如果B [i]> 100: (i)范围内(i,0): #需要一个子阵列才能颠倒过来。 漂亮卡住 – shabieh2

+2

把代码放在上面的问题中(缩进4个空格,使其显示为代码)。 – AChampion

回答

1

你需要考虑你的算法。
您正在创建基于100的容器,因此构建它们,然后解构以获得您的预期输出。使用[-1]作为索引表示总是添加到最后斌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] 
+0

谢谢Achampion! 您正在使用一些我没有用过的功能,所以我必须尝试一下! 看起来像输出的作品! – shabieh2

+0

感谢错误的人@ shabieh2 :) AChampion是谁回答。 – sberry

+0

编辑 大声笑,因为你可以看到我到处都是..非常快速的周转:) – shabieh2