2008年11月28日 星期五

技藝競竇97年模擬試題參考答案 Q2


' Problem2:惱人的零錢(15%)
' 東東在買東西付帳,總是習慣直接從錢包中拿鈔票付帳,而懶得掏出硬幣來。久而久之,錢包裡面累積了許多硬幣,
' 簡直重得不得了,所以東東終於受夠了!因此,她決定趁著今天買東西的時候,想辦法盡量減輕負擔。於是東東開始盤
' 算要怎樣湊出足夠的硬幣,才能讓付出去的硬幣個數越多越好。同時,目前這家店的老闆人很好,不論客人給他多少硬
' 幣,他都一定會用最少的硬幣找錢給客人。所以,當東東走到櫃台結帳時,東東想到自己如果多付一些硬幣讓老闆找錢,
' 說不定可以讓自己的錢包更輕!因此,東東開始煩惱到底要怎麼給錢,才能夠盡量「用掉」最多的硬幣呢(所謂的「用
' 掉」的硬幣個數,指的是拿出去的硬幣數,扣掉老闆找回來的硬幣數)?可惜的是,東東的算術一向不太靈光,因此希
' 望你能幫忙他解決這個煩惱。
' 輸入說明:
' 輸入資料的第一行是一個整數n,代表共有n 筆測試資料。接下來每筆測試資料有3 行:第1 行的數字C 表示要
' 買的東西的價格。第2 行有5 個數字p1 p5 p10 p20 p50,分別是東東錢包裡面一元、五元、十元、二十元和五十元硬幣
' 的個數。第3 行有5 個數字q1 q5 q10 q20 q50,是老闆所擁有的一元、五元、十元、二十元和五十元硬幣的個數。每
' 筆測試資料的所有數字都在0 到10000 之間;同一行的數字之間會用一個空白隔開。你可以假設東東身上的錢足夠來
' 購買該商品,而且至少有一種付錢的方法使得老闆可以找得開(如果需要找錢的話)。因為老闆和東東很不幸地很碰巧
' 地一張鈔票都沒有,請不要問說為什麼不能換成大鈔。
' 輸出說明:
' 你的輸出資料應該有n 行,分別對應到n 筆輸入的測試資料。每一行要輸出一個數字表示東東付完帳之後,剩餘
' 的硬幣總數。
' 輸入範例:
' 2
' 25
' 10 3 2 1 3
' 0 0 0 0 0
' 25
' 0 3 2 2 3
' 1 1 1 1 1
' 輸出範例:
' 6
' 4


Public Class Form1
Dim resultStr = ""
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Hide()
Dim fileContents As String
fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test2.txt")
Dim recArray() = Split(fileContents, vbNewLine)
Dim groupN = Val(recArray(0))
Dim recIndex = 1

For j = 1 To groupN
Dim price = recArray(recIndex)
Dim eeArray() = Split(recArray(recIndex + 1))
Dim bossArray() = Split(recArray(recIndex + 2))

Dim p1 = Val(eeArray(0))
Dim p5 = Val(eeArray(1))
Dim p10 = Val(eeArray(2))
Dim p20 = Val(eeArray(3))
Dim p50 = Val(eeArray(4))

Dim q1 = Val(bossArray(0))
Dim q5 = Val(bossArray(1))
Dim q10 = Val(bossArray(2))
Dim q20 = Val(bossArray(3))
Dim q50 = Val(bossArray(4))

Dim pq1 = p1 + q1
Dim pq5 = p5 + q5
Dim pq10 = p10 + q10
Dim pq20 = p20 + q20
Dim pq50 = p50 + q50

Dim amount = p1 * 1 + p5 * 5 + p10 * 10 + p20 * 20 + p50 * 50
Dim remain = amount - price

Dim n50 = 0
While remain >= 50 And pq50 >= 1
n50 = n50 + 1
remain = remain - 50
pq50 = pq50 - 1
End While

Dim n20 = 0
While remain >= 20 And pq20 >= 1
n20 = n20 + 1
remain = remain - 20
pq20 = pq20 - 1
End While

Dim n10 = 0
While remain >= 10 And pq10 >= 1
n10 = n10 + 1
remain = remain - 10
pq10 = pq10 - 1
End While

Dim n5 = 0
While remain >= 5 And pq5 >= 1
n5 = n5 + 1
remain = remain - 5
pq5 = pq5 - 1
End While

Dim n1 = 0
While remain >= 1 And pq1 >= 1
n1 = n1 + 1
remain = remain - 1
pq1 = pq1 - 1
End While

resultStr = resultStr & (n50 + n20 + n10 + n5 + n1) & vbNewLine
recIndex = recIndex + 3
Next j
MsgBox(resultStr)
'My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result2.txt", resultStr, False)
End
End Sub
End Class

沒有留言: