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

解决方案 »

  1.   

    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
      

  2.   

    谢谢
    有没有用java写的呢?
      

  3.   

    谢谢YaDa() 
    期待你程序
      

  4.   

    不过按照YaDa给出的例子,结果好像也不对吧,我修改了一下.java的.
    --------------------
    long A, B, C, Ha, Hb, Hc, H, H1, H2, H3;
    A = 12;
    B = 15;
    C = 36; Ha = 10;
    Hb = 8;
    Hc = 6; if (A % 9 == 0)
    H1 = A / 9 * Ha;
    else
    H1 = (A / 9 + 1) * Ha; B = B + A % 9 - 9;
    if (B % 9 == 0 || B < 0) {
    H2 = B / 9 * Hb;
    C = C + (B < 0 ? B : 0);
    } else {
    H2 = (B / 9 + 1) * Hb;
    C = C + B % 9;
    } if (C % 9 == 0 || C < 0)
    H3 = C / 9 * Hc;
    else
    H3 = (C / 9 + 1) * Hc; H = H1 + H2 + H3; System.out.println(H);
      

  5.   

    前面这个程序有错误,这个与人工计算对照过了。Option ExplicitPrivate Sub Command1_Click()
    Dim Num(2) As Long
    Dim H(2) As Long
    Dim tH As Long  '总高度    Num(0) = 12
        Num(1) = 15
        Num(2) = 36
        
        H(0) = 10
        H(1) = 8
        H(2) = 6
        
        tH = TotalH(Num, H, 9)
        Print tH
        
    End SubPrivate Function TotalH(BoxNum() As Long, BoxH() As Long, NumPerLayer As Long) As Long
    Dim i As Long
    Dim RestSpace As Long    For i = 0 To UBound(BoxNum)
            If BoxNum(i) - RestSpace <= 0 Then
                RestSpace = RestSpace - BoxNum(i)
            Else
                TotalH = TotalH + ((BoxNum(i) - RestSpace) \ NumPerLayer) * BoxH(i)
                
                If (BoxNum(i) - RestSpace) Mod NumPerLayer > 0 Then
                    TotalH = TotalH + BoxH(i)
                    RestSpace = NumPerLayer - (BoxNum(i) - RestSpace) Mod NumPerLayer
                End If
                
            End If
            
            '一层一层看看
            Print TotalH
        Next
    End Function
      

  6.   

    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