当前位置:首页 » 《随便一记》 » 正文

蓝桥杯入门即劝退(二十三)货物摆放问题

15 人参与  2023年03月31日 17:25  分类 : 《随便一记》  评论

点击全文阅读


欢迎===关注===点赞===评论,共同学习,共同进步!

------持续更新蓝桥杯入门系列算法实例--------

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

专栏蓝桥杯入门系列

 一、题目描述

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

现在,小蓝有 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 位数字)时,总共有多少种方案?

提示:建议使用计算机编程解决问题。

二、解题思路

1、由于给出的数字已经超出了int的最大范围,因此选择使用Long整型。

2、按题意无非就是求该数字的非重复的三个因数。

3、如果使用暴力解法,运行会报错,因此必须缩小范围。

4、缩小范围可以对n进行开平方,使用sqrt()方法。

5、将n的因数存储进一个列表中。

5、再次取商获得下一个因数,如:15/3=5,那么3、5都是其因数;且不能是重复的,如9/3=3,这里两个数如果都add则是重复了,因此要考虑去掉后者。

6、最后一个三重循环求解即可。

7、最后答案2430

 三、代码实现

public static void main(String[] args) {        Long n=new Long("2021041820210418");//创建Long型,注意是字符串形式        int count=0;        ArrayList<Long> res=new ArrayList();        for (long i=1;i<Math.sqrt(n);i++){            if (n%i==0) {                res.add(i);//添加一个因数                if (n/i!=i)//非重复即再次添加                    res.add(n/i);            }        }        for (long i:res)            for (long k:res)                for (long m:res)                {                    if (i*k*m==n)                        count++;                }        System.out.print(count);    }

发文不易,恳请大佬们高抬贵手!


点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


评论:往来无白丁,是你我交流的的开始!


收藏:愿君多采撷,是大佬们对在下的赞赏!


点击全文阅读


本文链接:http://zhangshiyu.com/post/57633.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1