千家信息网

装箱问题的Java实现是怎样的

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,装箱问题的Java实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。问题:一个工厂制造的产品形状都是长方体,它们
千家信息网最后更新 2026年11月04日装箱问题的Java实现是怎样的

装箱问题的Java实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

问题:

一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。

Input

输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。

Output

除了输入的***一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。

对于6*6的一个箱子来说,最多只能放一个6*6或一个5*5或4*4的盒子,所以我们初始化需要的箱子数时就是这这几种箱子的个数和,对于3*3的箱子来说,我们可以放一个或2个或3个或4个,这我们可以通过整除和取模来确定放了3*3盒子的箱子数,再把它加入到总箱子数中,接下来我们就是把1*1和2*2的盒子塞进前面所需的箱子中,当塞不完时再来新增盒子,我们首先要将前面的箱子剩余的空间统计出来,并且要以2*2的优先考虑,因为我们可以把多余的2*2的位置变为填充4个1*1的,毕竟1*1的只要有空间随处都可以塞。所以当我们的箱子要是装了1个5*5的盒子的话,那么它就只能塞1*1的了,一个可以塞11个1*1的,对于装了4*4的盒子的话,那么还可以装5个2*2的盒子,暂且不要去转话成1*1的,除非没办法只能装1*1的,对于3*3的话就可以根据取模之后一个箱子剩下的空间了,如果一个箱子中只放了一个3*3的,那么还剩下3个3*3的空间可以放,我们知道可以放5个2*2的和7个1*1的,对于放了2个3*3的箱子,我们剩下的空间可以放3个2*2的以及6个1*1的,对于放了3个3*3的箱子,我们只能放1个2*2的和5个1*1的,这样一来我们就统计出了此时可以放2*2以及1*1的空间到底有多少,接下来我们就放箱子进去啊,放一个就减一个,知道1*1的和2*2的盒子都放完了,要是还没有放完的话我们就新增箱子或者如果1*1的没放完,而2*2的还有剩,那么就将每个2*2的转化成4个1*1的就行了,具体实现就看下面的代码吧,由于时间关系,就没写注释了。

import java.io.BufferedInputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;

public class Test {

public static void main(String args[]){

Scanner sc=new Scanner(new BufferedInputStream(System.in));

boolean flag=true;

Map map=new HashMap();

int k=0;

while(flag){

int n[]=new int[6];

n[0]=sc.nextInt();

n[1]=sc.nextInt();

n[2]=sc.nextInt();

n[3]=sc.nextInt();

n[4]=sc.nextInt();

n[5]=sc.nextInt();

if(n[0]==0&&n[1]==0&&n[2]==0&&n[3]==0&&n[4]==0&&n[5]==0){

flag=false;

}else{

map.put(k, n);

k++;

}

}

for(int i=0;i< map.size();i++){

int[] vs=(int[])map.get(i);

int boxNum=0;

boxNum+=vs[3]+vs[4]+vs[5];

if(vs[2]>0){

if(vs[2]%4==0){

boxNum+=vs[2]/4;

}else{

boxNum+=vs[2]/4+1;

}

}

int for1=vs[4]*11;

int for2=vs[3]*5;

if(vs[2]%4==1){

for1+=7;

for2+=5;

}else if(vs[2]%4==2){

for1+=6;

for2+=3;

}else if(vs[2]%4==3){

for1+=5;

for2+=1;

}

if(vs[0]< for1){

vs[0]=0;

}else{

vs[0]=vs[0]-for1;

}

if(vs[1]< for2){

if(vs[0]>0){

if(4*(for2-vs[1])-vs[0]>=0){

vs[0]=0;

}else{

vs[0]=vs[0]-4*(for2-vs[1]);

}

}

vs[1]=0;

}else{

vs[1]=vs[1]-for2;

}

if(!(vs[0]==0&&vs[1]==0)){

if(vs[1]>0){

if(vs[1]%9==0){

boxNum+=vs[1]/9;

}else{

boxNum+=vs[1]/9+1;

if(vs[0]>(9-(vs[1]%9))*4){

if((vs[0]-(9-(vs[1]%9))*4)%36==0){

boxNum+=(vs[0]-(9-(vs[1]%9))*4)/36;

}else{

boxNum+=(vs[0]-(9-(vs[1]%9))*4)/36+1;

}

}

}

}else if(vs[0]>0){

if(vs[0]%36==0){

boxNum+=vs[0]/36;

}else{

boxNum+=vs[0]/36+1;

}

}

}

System.out.println(boxNum);

}

}

}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

箱子 盒子 一行 空间 文件 订单 输入 问题 产品 包裹 接下来 代表 就是 工厂 数量 整数 程序 要是 长方体 别为 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技股互联网 涨乐互联网科技 广州紫鲸互联网科技 深圳期待互联网科技 撒么互联网科技公司 丰台科技园 互联网公司 广西拼得多互联网科技有限公司 银川新华互联网科技学校地址 江苏南京365互联网科技 互联网科技寓意 移动互联网科技股 互联网金融科技公司干啥的 互联网科技公司有风险吗 中国科技创新与世界互联网大会 四川慕妮娅互联网科技有限公司 用友工业互联网科技发展 黑云互联网科技有限公司 银川新华互联网科技学校原画 广州三三互联网科技有限公司 武汉亿视互联网科技有限公司 亿人帮互联网科技有限公司 华服互联网科技怎么样 金融科技 互联网金融 云创客互联网科技公司 互联网保险科技创业 中国互联网公司排名锤子科技 工业互联网展湾科技股份有限公司 山东星卡互联网科技有限公司官网 九思连强互联网电子科技有限公司 长沙渺峰互联网科技有限公司
0