2012年11月20日 星期二

自動賣票機找零問題

某城市的捷運車票共有20、25、30、35、40、45六種,而可投入的錢幣共有1、5、10、50、100元五種。
請計算可能的投幣方式與需找回的零錢金額。
(當所投入的金額超過票價後,多投的錢幣會直接吐還給使用者,所以,多投的部分不用計算。例如,票價20元,當依序投入7個1元、3個5元後,再來投入任何錢幣都會直接先吐還使用者。直接先吐還的這部分,不用寫入程式。)
輸入:in.txt
20
輸出:out.txt
投入20個1元,找回0元。
投入15個1元 1個5元,找回0元。
投入10個1元 2個5元,找回0元。
投入5個1元 3個5元,找回0元。

投入1個50元,找回30元。
投入1個100元,找回80元。

2 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, num
    For x = 0 To 1
    Money = x * 100
    If Money >= num Then Call printt("投入" & x & "個100元,找回" & (Money - num) & "元"): Exit For
    For y = 0 To 1
    Money = y * 50 + x * 100
    If Money >= num Then Call printt("投入" & y & "個50元 " & x & "個100元,找回" & (Money - num) & "元"): Exit For
    For z = 0 To 5
    Money = z * 10 + y * 50 + x * 100
    If Money >= num Then Call printt("投入" & z & "個10元 " & y & "個50元 " & x & "個100元,找回" & (Money - num) & "元"): Exit For
    For k = 0 To 9
    Money = k * 5 + z * 10 + y * 50 + x * 100
    If Money >= num Then Call printt("投入" & k & "個5元 " & z & "個10元 " & y & "個50元 " & x & "個100元,找回" & (Money - num) & "元"): Exit For
    For j = 0 To 45
    Money = j * 1 + k * 5 + z * 10 + y * 50 + x * 100
    If Money >= num Then Call printt("投入" & j & "個1元 " & k & "個5元 " & z & "個10元 " & y & "個50元 " & x & "個100元,找回" & (Money - num) & "元"): Exit For
    Next
    Next
    Next
    Next
    Next
    Close #2
    Close #1
    End
    End Sub

    Public Sub printt(strr As String)
    strr = Replace(strr, "投入0個1元 ", "投入")
    strr = Replace(strr, " 0個5元 ", " ")
    strr = Replace(strr, " 0個10元 ", " ")
    strr = Replace(strr, " 0個50元 ", " ")
    strr = Replace(strr, " 0個100元,", ",")
    Print #2, strr
    End Sub

    回覆刪除

  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    a = Split("1,5,10,50,100", ",")
    Do While Not EOF(1)
    Input #1, n
    Print #2, "投入" & n & "個1元" & " ,找回0元。"
    For i = 1 To 4
    r = Val(n) \ Val(a(i))
    For j = 1 To r + 1
    If Val(a(i)) * j < Val(n) Then
    ans = Val(n) - Val(a(i)) * j
    If ans Mod Val(a(i - 1)) = 0 Then Print #2, "投入" & ans \ Val(a(i - 1)) & "個" & a(i - 1) & "元 " & " " & j & "個" & a(i) & "元" & ",找回0元。"
    Else
    Print #2, "投入" & j & "個" & a(i) & "元 ,找回" & Val(a(i)) * j - Val(n) & "元"
    End If
    Next j
    Next i
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除