13歲的小明喜歡玩他的方塊積木,他總是把方塊疊在一起,型成高度不一的方塊堆。然後他說:這是一面牆。五歲的妹妹小每聽到了就跟小明說:真正的牆高度應該要一樣才行。小明聽了覺得有道理,於是決定要搬動一些方塊使所有方塊堆的高度一樣。如下圖。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊,以達成這個目的,你能幫助他嗎? (輸入規範:每組資料有兩列 第一列有一個數字N,代表有幾堆方塊,第二列有n個數字,分別代表這N堆方塊的高度H。另1<=n<=50、1<=H<=100。方塊的總數一定可以整除堆數N,也就是說,一定可以使所有方塊同高度。)
▉
▉
▉ ▉▉ →
▉ ▉ ▉▉ ▉▉▉▉▉▉
▉ ▉ ▉▉ ▉▉▉▉▉▉
▉▉▉ ▉▉ ▉▉▉▉▉▉
▉▉▉▉▉▉ ▉▉▉▉▉▉
輸入範例:
6
5 2 4 1 7 5
輸出範例:
5
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Dim y(50) As Integer
Input #1, x
For i = 1 To x
Input #1, y(i)
z = z + y(i)
Next
b = z / x
For i = 1 To x
If y(i) > b Then
c = y(i) - b
ans = ans + c
End If
Next
Print #2, ans
Close
Close
End
End Sub
小冰好,
回覆刪除這題正確。
比賽的題目中,沒有說需要做錯誤處理的,就不用做錯誤處理。
(平常自己在寫非比賽的程式時,要特別注意錯誤的處理哦,但是,訓練比賽的,就不用了。)
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Dim x(50) As Integer
Input #1, n
For i = 1 To n
Input #1, x(i)
y = y + x(i)
Next i
c = y / n
ans = 0
For i = 1 To n
If x(i) > c Then
a = x(i) - c
ans = ans + a
End If
Next i
Print #2, ans
Close #2
Close #1
End
End Sub
晟晟好,
回覆刪除程式正確。
a=x(i)-c
ans = ans+a
這樣的兩行,也可以習慣成一行。
ans = ans + (x(i) -c)
加上括弧,是讓自己除錯時,容易看懂自己的程式寫法。
另外,多思考一個,
這麼簡單的一題,可以用一個for迴圈就好了嗎?
Open App.Path & "\in.txt" For Input As #1
回覆刪除Open App.Path & "\out.txt" For Output As #2
Dim y(50) As Integer
Input #1, x
For i = 1 To x
Input #1, y(i)
a = a + y(i)
Next
b = a / x
For i = 1 To x
If y(i) > b Then
c = y(i) - b
ans = ans + c
End If
Next
Print #2, ans
Close
Close
End