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
http://chscvb.blogspot.com/2011/01/blog-post_13.html
回覆刪除以前的連結
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
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
佑好,arro好,
回覆刪除程式正確。