2011年10月12日 星期三

96模擬 Problem 3 (積木方塊

Problem 3 (積木方塊 13%)
3歲的小明喜歡玩他的方塊積木,他總是把方塊疊在一起,形成高度不一的方塊堆。然後他說:這是一面牆。5歲的姊姊小美聽到了就跟小明說:真正的牆高度應該要一樣才行。小明聽了覺得有道理,於是決定要搬動一些方塊使所有方塊堆的高度一樣。如下圖。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊,以達成這個目的,你能幫助他嗎?



(請參照 前‧積木方塊 的文章)




輸入說明:輸入檔案中包含好幾組資料,每組資料有2列,第一列有一個數字n,代表有幾堆方塊。第二列有n個數字,分別代表這n堆方塊的高度hi。令1 n 50、1 hi 100。方塊的總數一定可以整除堆數n,也就是說,一定可以使所有的方塊堆同樣高度。如果輸入的n=0,代表輸入結束。(請參照輸入範例)
輸入範例:test3.txt
6
5 2 4 1 7 5
3
1 1 1
0

輸出說明:對每一組輸入資料,輸出需搬動方塊的最小數目,以使所有的方塊堆成同一高度。(請參照輸出範例)
輸出範例:result3.txt
5
0

4 則留言:

  1. http://chscvb.blogspot.com/2011/01/blog-post_13.html

    以前的連結

    回覆刪除
  2. Dim Total
    Dim Average
    Dim H(50)

    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, n
    If n = 0 Then Exit Do
    Total = 0

    For i = 1 To n
    Input #1, X
    H(i) = X
    Total = Total + X
    If i = n Then Average = Total / n
    Next i

    ans = 0
    For i = 1 To n
    If H(i) > Average Then ans = ans + (H(i) - Average)
    Next i

    Print #2, ans

    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  3. Dim X, m$, Avg, k As Boolean, T
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Do While Not EOF(1)
    Input #1, n
    If n <> 0 Then
    Line Input #1, m
    X = Split(m)
    T = 0
    Call A1


    For i = 0 To UBound(X)
    If Val(X(i)) > Avg Then T = T + (X(i) - Avg)
    Next

    Print #2, T

    End If
    Loop

    Close
    Close
    End
    End Sub


    Sub A1()
    For i = 0 To UBound(X)
    Avg = Avg + Val(X(i))
    Next
    Avg = Avg / (UBound(X) + 1)
    End Sub

    回覆刪除
  4. 佑好,arro好,
    程式正確。

    回覆刪除