日期:2014-05-18  浏览次数:20691 次

满分求码箱子算法
内容:
        假设一个托盘:托盘上每层能码放底面积相同、而且数量固定的箱子(如:能码放9个底面积相同的箱子),但是箱子的高度不同。
        假设有箱子A   12   个   ,箱子B   15个   ,箱子C   36个,每层码放9个箱子。
        箱子的高度A> B> C,那么第一层码放9个A箱子,第二层码放3个A箱子和6个B箱子,以此类推。
        每层的高度以最高的箱子为准。(如:第二层有3个A箱子和6个B箱子,那么第二层的高度是A箱子的高度。)
        求得所有箱子码放在托盘上的高度。
        求此题算法  
        谢谢各位

------解决方案--------------------
路过,帮顶
------解决方案--------------------
顶~~~~~~~~

------解决方案--------------------
请教能不能写成个方法 通过循环来计算呢?
------解决方案--------------------
LZ面积相等是什么意思“能码放9个底面积相同的箱子”A,B,C的面积要考虑吗?
还有这个码法是不是先码A码完了码B
如果是这样的码法不要循环,只要用箱子数除9
------解决方案--------------------
回Don_Juan(只求一炮)
A,B,C的面积不考虑
是先码A码完了码B
谢谢大家
------解决方案--------------------
顶~~~~~~~~
------解决方案--------------------
public class BoxTest
{
public static void main(String[] args)
{
Box A=new Box(5,12);
Box B=new Box(3,15);
Box C=new Box(1,36);
int width=0;
if(A.getamount()%9!=0)
{
width+=(A.getamount()/9+1)*A.getHigh();
B.setamount(B.getamount()-(9-A.getamount()%9));
}
else
width+=(A.getamount()/9)*A.getHigh();
if(B.getamount()%9!=0)
{
width+=(B.getamount()/9+1)*B.getHigh();
C.setamount(C.getamount()-(9-B.getamount()%9));
}

else
width+=(B.getamount()/9)*B.getHigh();
if(C.getamount()%9!=0)
width+=(C.getamount()/9+1)*C.getHigh();
else
width+=(C.getamount()/9)*C.getHigh();

System.out.println( "高度是: "+width);
}
}
class Box
{
public Box(int high,int amount)
{
this.high=high;
this.amount=amount;
}
private int high,amount;
public int getHigh()
{
return high;
}

public int getamount()
{
return amount;
}
public void setamount(int amount)
{
this.amount=amount;
}


}
这个问题被我写复杂了我也学习中,不过这样只能算这三个箱子,如果要动态的设置我认为应该把这个Box类设为ArrayList,实现Comparable <T> 不知道是不是应该这样
------解决方案--------------------
郁闷阿~~~好像都不对呢!
------解决方案--------------------
LZ的意思是不是这样

A 12 个 ,箱子B 15个 ,箱子C 36个...
箱子的高度A> B> C...
ABC假设高度分别 13、9、5
那么第一层码放9个A箱子,第二层码放3个A箱子和6个B箱子,以此类推。
那第一层的高度就是13,第二层的高度也是13,第三层的高度就是9
第四层的高度就是9,第五层的高度也是5,是不是这样???