货物摆放问题

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了货物摆放问题相关的知识,希望对你有一定的参考价值。

1.问题

小蓝有一个超大的仓库,可以摆放很多货物。

现在,小蓝有n箱货物要摆在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。

小兰希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆积L、W、H的货物,满足n=L*W*H。

例如,当n=4时,有以下6种方案:1*1*4、1*2*2、1*4*1、2*1*2、2*2*1、4*1*1.

请问,当n=2021041820210418时,总共有多少种方法?

2.算法描述

首先写出n的值,然后创建一个列表ans,变量i从1遍历到n开平方取整后的数,如果n对i求余为0,就将i和n对i整除的向下取整添加到ans列表,随后以元组形式记录符合条件的每种方案,利用set()函数去重,分别利用三次循环在ans里面取三个数,如果该三个数相乘等于n,则将这三个加到set元素集中,最后输出该元素集的长度即为该题目的答案。

3.实验结果与讨论

通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。

代码清单 1

n = 2021041820210418
ans = []
for i in range(1,int(n**0.5)+1):
   if n % i == 0:
       ans.append(i)
       ans.append(n//i)
case = set()
for a in ans:
   for b in ans:
       for c in ans:
           if a * b * c == n:
               case.add((a,b,c))
print(len(case))

4 结语

本文涉及到了内置set函数、for循环、if条件语句的判断以及元组,本文中的“**”是次方的意思,“//”是一个算数运算符,表示整数除法,可以返回商的整数部分(向下取整),进一步巩固了这些知识点,通过实验、实践等证明提出的方法是有效的,是能够解决开始提出的问题。

以上是关于货物摆放问题的主要内容,如果未能解决你的问题,请参考以下文章

分解质因数算法案例——仓库货物摆放(蓝桥杯)

LQ0082 货物摆放因子+枚举

蓝桥杯货物摆放思路分析

蓝桥杯货物摆放思路分析

蓝桥杯货物摆放思路分析

暴力枚举