日期:2014-05-20  浏览次数:20686 次

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

------解决方案--------------------
Private Sub Command1_Click()
Dim A As Long
Dim B As Long
Dim C As Long
Dim Ha As Long
Dim Hb As Long
Dim Hc As Long
Dim H As Long
Dim H1 As Long
Dim H2 As Long
Dim H3 As Long

A = 12
B = 15
C = 36

Ha = 10
Hb = 8
Hc = 6

If A Mod 9 = 0 Then
H1 = A \ 9 * Ha
Else
H1 = (A \ 9 + 1) * Ha
End If

B = B - A Mod 9
If B Mod 9 = 0 Or B < 0 Then
H2 = B \ 9 * Hb
Else
H2 = (B \ 9 + 1) * Hb
End If

If B < 0 Then
C = C - A Mod 9 - B
Else
C = C - B Mod 9
End If

If C Mod 9 = 0 Or C < 0 Then
H3 = C \ 9 * Hc
Else
H3 = (C \ 9 + 1) * Hc
End If

H = H1 + H2 + H3

Print H '电脑计算等于60

End Sub
------解决方案--------------------
没看懂你的意思.
------解决方案--------------------
public class Untitled1 {
private int A=12;
private int B=15;
private int C=36;
private int D=9;
private static final int ha=3;
private static final int hb=2;
private static final int hc=1;
public int suanfa()
{
int h_box=0;//定义高度
int w_box=9;//定义地面
while(A> 0)
{
if (w_box> 0) {
A--; //本层没有满 继续加
w_box--;
}

else {
h_box += ha;
w_box = 9; //本层已经满 换上层
}
}
if(A==0&&w_box%9!=0)
{ h_box += ha;
B = B - w_box;
w_box=9;
}
else if(A==0&&w_box%9==0)
{
h_box += ha;
w_box=9;

}//a结束
while (B > 0) {
if (w_box != 0) {
B--; //本层没有满 继续加
w_box--;
}

else {
h_box += hb;
w_box = 9; //本层已经满 换上层
}

} if(B==0&&w_box%9!=0){
h_box += hb;
C=C-w_box;
w_box=9;}
else if(B==0&&w_box%9==0)
{
h_box += ha;
w_box=9;

}

while(C> 0)
{
if (w_box> 0) {
C--; //本层没有满 继续加
w_box--;

}

else if (A==0&&B==0&&C==0&&w_box % 9 != 0)
{
h_box += hc;
}
else {
h_box += hc;
w_box = 9;
}

}


return(h_box);


}

public static void main(String[] args) {
int i=0;
Untitled1 u=new Untitled1();
i=u.suanfa();
System.out.print(i);
}
}
大概写了一个 运行结果12