描述
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。
解决思路
1.4*4, 5*5, 6*6这三个型号的长方体需各占一个包裹;
2.4个3*3的长方体占一个包裹,数量对4取余之后不为0则需要多占一个包裹;
3.计算以上四种型号的长方体装完之后剩余空间可装2*2和1*1的数量,记为count1和count2
4.对比count2与需求数,若空位不够用则根据数量需求再添加包裹,同时更新count2;
5.根据count2更新count1,计算最终需要的包裹总数。
答案
import java.util.Scanner;
public class Test2 {
public static void main(String [] args){
Test2 t = new Test2();
t.input();
}
/**
* 输入方法
*/
public void input(){
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
String lineStr = scan.nextLine();
if(lineStr.startsWith("0 0 0 0 0 0")){
break;
}
String[] boxStr = lineStr.split(" ");
int[] boxInt = new int[boxStr.length];//存储每个的数量boxInt[3]的值,代表有3*3*h的东西有多少个
for(int i=0;i<boxStr.length;i++){
boxInt[i] = Integer.parseInt(boxStr[i]);
}
getPacCount(boxInt);
}
scan.close();
}
/**
* 获取所需箱数量的方法--核心方法
* @param a
*/
public void getPacCount(int [] a){
int count =a[5]+a[4]+a[3];//底面边长为6,5,4的长方体,每一个都需要占用一个单独的包裹
int count1=11*a[4];//每一个边长为5的长方体装入包裹后剩余空间可放置11个底面边长为1的长方体
int count2=5*a[3];//每一个底面边长为4的长方体放入包裹后剩余空间可放置5个底面边长为2的长方体
if(a[2]>0){//如果需要放置底面边长为3的长方体
count=count+a[2]/4;
int m=a[2]%4;
if(m!=0){
count=count+1;
if(m==1){//若对4取余后剩余1个底面边长为3的长方体
count2=count2+5;//则剩余空间可放置五个2*2的长方体
count1=count1+7;//同时可放置7个1*1的长方体
}
else if(m==2){
count2=count2+3;//则剩余空间可放置3个2*2的长方体
count1=count1+6;//同时可放置6个1*1的长方体
}
else if(m==3){
count2=count2+1;//则剩余空间可放置1个2*2的长方体
count1=count1+5;//同时可放置5个1*1的长方体
}
}
}
if(a[1]>0){//如果需要放置2*2的长方体
if(count2>=a[1]){//如果剩余2*2的空间数量>需要放置的2*2长方体的数量
count2=count2-a[1];//剩余2*2的空间的数量做相应的扣减
}
else if(count2<a[1]){//如果剩余2*2的空间数量<需要放置的2*2长方体的数量
count=count+(a[1]-count2)/9;//计算需要用到的箱子数量
int n=(a[1]-count2)%9;//计算取余后剩余的2*2的长方体的数量
count2=0;//因本来剩下的空间不够,所以此时count2=0
if(n!=0){
count=count+1;
count2=9-n;//装完2*2长方体后箱中剩余空间
}
}
}
if(a[0]>0){//如果需要装1*1的长方体
count1=count1+4*count2;//获取装完其它的长方体后所有的剩余空间
if(count1<a[0]){//如果剩余空间不够装,够装的话就不需要任何处理了
count=count+(a[0]-count1)/36;
if((a[0]-count1)%36!=0){
count=count+1;
}
}
}
System.out.println(count);
}
}
分享到:
相关推荐
贪心算法的思想---集装箱的装箱问题(c语言算法)
综合遗传和退火的混合算法解决三维装箱问题,仅部分代码
实验2装箱问题-贪心算法
利用遗传算法和模拟退火,解决三维装箱问题,并可图形化展示装箱方案结果
利用遗传算法解决一维装箱问题,并利用matlab实现
三维装箱问题MATLAB代码,注释比较少,需要学习的可以下载。
三维装箱问题的MATLAB可视化仿真最后输出三维装箱效果,matlab2021a测试。仿真速度较慢。
【三维装箱】基于粒子群算法求解三维装箱问题matlab源码.md
作为三维装箱问题的一种工程应用,集装箱装载问题(Container Loading Problem,CLP)通常是指如何将一些小尺寸货物按照某种方式装入集装箱中。集装 箱装载质量的好坏,直接影响着企业运输成本的高低。如何给出一个...
装箱问题 【问题描述】 有一个箱子容量为V(正整数,0),同时有n 个物品(0),每个物 品有一个体积(正整数)。要求从m 个物品中,任取若干个装入箱内,使箱子的剩余空间为 最小。 【输入文件】 第1 行两个整数v 和...
【摘要】装箱问题属于典型的NP完全问题,旨在充分考虑容器承重、容积等因素的前提下,对装箱问题通过数学建模与算法实现来提高空间利用率,从而实现利润最大化。本文主要
matlab二维装箱问题求解
可以模拟装箱问题,利用画矩形框的形式,使得装箱问题更加直观。
事实上,集装箱的装箱问题在大部分企业中一直得不到很好解决,往往是凭经验作业,造成: • 空间利用率低,平均只有八成左右 • 计算耗时费力,难以得到优化方案 • 货物装柜超重,装载数量不准确 • 作业缺乏...
数学建模装箱问题PPT学习教案.pptx
装箱问题,内有说明,应用贪心算法,进行从大到小的分配到包装箱
算法思想: 本实验采用贪心算法的思想。将集装箱想象成为一个长为L、宽为W、高为H的长方体,将圆柱形木材想象成为一底面半径为ri、长为L的圆柱体。 1、首先需要对圆柱体按半径从大到小进行排序,排完序后将其分为...
对于背包问题和装箱问题,都可以采用组合的思路进行求解。本题目给出了具体的求解思路和C++实验代码。以及正确的实验结构,对于求解背包问题有很大的实际意义。
货物配装问题实质上是背包问题与装箱问题的混合,有着广泛的应用。配装,是指充分利用运输工具(如火车、货车、轮船等,本文主要是指货车) 的载重量和容积,采用先进的装载方法,合理安排货物的装载计划,最大限度地发挥...