装箱问题 博客分类: 算法 java装箱
程序员文章站
2024-03-25 15:09:22
...
描述
一个工厂制造的产品形状都是长方体,它们的高度都是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,计算最终需要的包裹总数。
答案
一个工厂制造的产品形状都是长方体,它们的高度都是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); } }
上一篇: <转>写给每个程序员的忠告 博客分类: 读书笔记 生活
下一篇: 压缩的思考及探索 压缩
推荐阅读
-
装箱问题 博客分类: 算法 java装箱
-
装箱问题 博客分类: 算法 java装箱
-
Java程序设计编程题40题(二) 博客分类: 算法 javaalgorithm算法笔试程序设计
-
笔试题:海量日志中提取访问次数前100的IP 博客分类: 数据结构与算法J2SE java面试大数据日志分析笔试
-
2012/4/9----二叉查找树(二叉排序树)的各种操作 博客分类: 算法 算法java二叉查找树二叉排序树akon405
-
连续平方数 博客分类: java算法 连续平方数
-
孪生素数 博客分类: java算法 孪生素数java算法
-
全排列,精简 博客分类: java算法 全排列java算法
-
使用二进制替代解决全排列问题 博客分类: java算法 算法全排列字符串二进制
-
买不到的数目,组合问题 博客分类: java算法 组合买不到的数