[蓝桥杯2021初赛] 货物摆放
题目描述:
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有n 箱货物要摆放在仓库,每箱货物都是规则的正方体。
小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H 的货物,满足n = L × W × H。
给定n,请问有多少种堆放货物的方案满足要求。
例如,当n = 4 时,有以下6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
请问,当n = 2021041820210418 (注意有16 位数字)时,总共有多少种
方案?
提示:建议使用计算机编程解决问题。
数组:
- n = L × W × H,故先找n的因数,并存到数组;
- 三层for进行暴力循环。
public class Main { public static void main(String[] args) { long n = 2021041820210418L; long ar[] = new long[1000]; int ars = 0;//数组下标 int gs = 0;//个数 for(long i = 1;i*i<=n;i++) { if(n%i==0) {//能被整除的数是因数 ar[ars++] = i; if(i != n/i) { ar[ars++] = n/i; } } } for(int i = 0;i < ars;i++) { for(int j = 0;j < ars;j++) { for(int k = 0;k < ars;k++) { if(ar[i]*ar[j]*ar[k] ==n) { gs++; } } } } System.out.println(gs); } }
链表:
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { long n = 2021041820210418L; List<Long> ars =new ArrayList<>(); int gs = 0;//个数 for(long i = 1;i*i<=n;i++) { if(n%i==0) { ars.add(i); ars.add(n/i);//list会去重,不用判断i==n/i } } for(int i = 0;i < ars.size();i++) { for(int j = 0;j < ars.size();j++) { for(int k = 0;k < ars.size();k++) { if(ars.get(i)*ars.get(j)*ars.get(k)==n) { gs++; } } } } System.out.println(gs); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人