暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

算法题:货物摆放

云丶言 2021-11-11
791

题目来源: 第十二届蓝桥杯省赛B组试题

题目解析

这一题我们需要捕捉到一个最重要的信息,即:n = L × W × H
。也就是说,长宽高 L、W、H 都是数值n的公约数,因此,我们第一步应该使用一个for循环加取模运算找出n的所有公约数,然后再使用三层for循环计算出使 n = L × W × H
 成立的结果即可得出答案。

需要注意的是: 题目所给的n是一个16位数,在寻找n的所有公约数时,如果我们只是单纯的从1到n进行取模运算,得到最终答案时可能已经到”猴年马月“了~!因此我们需要对for循环的条件进行优化。

如何优化? 首先,n=4时,n的公约数分别是1、2、4 ,当我们通过n%1
取模得知1是n的公约数时,其实我们同时也知道了n的另一个公约数4。因为1×4=4,每一次取模运算时,我们可以同时计算出两个公约数。所以,我们只需要进行根号n次for循环即可得到n的所有公约数。


具体代码

import java.util.*;


public class Main {
public static void main(String[] args) {
Set<Long> set = new HashSet<>();
int count = 0;
long n = 2021041820210418L;

// 获取n的公约数
for(long i = 1; i*i <= n; i++) {
if (n % i == 0) {
set.add(i);
set.add(n/i);
}
}

for(long l : set) {
for(long w : set) {
for(long h : set) {
if (l*w*h == n) {
++count;
}
}
}
}
System.out.println(count);
}
}

运行结果

2430

若上述代码存在问题,或者您有更优解,欢迎在评论区提出~!!

文章转载自云丶言,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论