0
点赞
收藏
分享

微信扫一扫

2021蓝桥杯JavaB----货物摆放

全栈顾问 2022-04-04 阅读 57

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

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

2.思路
暴力求解
长宽高分别为a,b,c
先给n(结果),我们要先算出n的因数(n%a=0&&n%b==0&&n%c=0)
然后用三重for循环遍历,使得abc=n
再用一个cnt 计数器计数解法的个数

3.代码实现

package 蓝桥杯;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class 货物摆放 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
	    int a,b,c;
	    long n=sc.nextLong();
	    int cnt=0;
	   List<Long> list=new ArrayList<>();
	   //根号n能降低时间复杂度
	   for(long i=1;i<=Math.sqrt(n);i++)
	   {
		   if(n%i==0)//找到n的因子
			   list.add(i);//把因子添加到链表上
		    if(i != n / i)
		   {
	            list.add(n / i);
	          }
//			/*
//			 * else { list.add(n/i);//除不尽,非因子 }
//			 */
	   }
	   for(int i=0;i<list.size();i++)
	   {
		   for(int j=0;j<list.size();j++)
		   {  
		   if(list.get(i) * list.get(j) > n)
			   {
	            continue;//跳过,如果i*j>n 则i*j*k>n 降低时间复杂度
	          }
		   
			   for(int k=0;k<list.size();k++)
			   {
				   if(list.get(i)*list.get(j)*list.get(k)==n)
					   cnt++;
			   }
		   }
		   
	   }
	   System.out.println(cnt);
	
	}

}

4.答案

举报

相关推荐

0 条评论