2012年6月5日 星期二

購買花朵


鬱金香一朵50元、香水百合一朵10元、白玫瑰一朵5元、滿天星一朵1元,現王先生有一筆金額N (0<100),請設計一程式,計算出此金額若全部用完,能買到的花朵數。(買到的花朵數必須為最少,花朵數若非最少,則本題算錯,零分計算。)

輸入說明:輸入金額n
輸入範例:假定先生有 78元。實際輸入之檔案內容如下:
實際輸入:78

輸出說明:第一列為花朵總數。第二列到第五列分別為鬱金香、香水百合、白玫瑰、滿天星的花朵數。
輸出範例:上例中先生有 78元,能買到最少的花朵數分別為鬱金香1朵、香水百合2朵白、玫瑰1朵、滿天星3朵。實際輸出之檔案內容如下:
實際輸出:
                7
                1
                2
                1
                3

6 則留言:

  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, m
    ans = 0
    a = 0
    b = 0
    c = 0
    d = 0
    Do
    If m >= 50 Then m = m - 50: ans = ans + 1: a = a + 1
    If m < 50 And m >= 10 Then m = m - 10: ans = ans + 1: b = b + 1
    If m < 10 And m >= 5 And m < 50 Then m = m - 5: ans = ans + 1: c = c + 1
    If m < 10 And m >= 1 And m < 50 And m < 5 Then m = m - 1: ans = ans + 1: d = d + 1
    Loop Until m = 0
    Print #2, ans
    Print #2, a
    Print #2, b
    Print #2, c
    Print #2, d
    Close
    Close
    End
    End Sub

    回覆刪除
  2. 小冰好,
    程式正確。
    你只用一個do loop來做,如果用3個do loop來做,會看起來清楚些。
    do while m>=50
    m = m-50
    a = a +1
    loop
    其它省略。
    ***
    但是,其實,這題直接用數學的解法,會更直接。
    a = m \50
    m = m mod 50
    b = m \10
    m = m mod 10
    c = m \5
    d = m mod 5
    就完成了。

    回覆刪除
  3. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Dim x, a, b, c, d As Integer
    Input #1, n
    a = n \ 50
    n = n - (a * 50)
    b = n \ 10
    n = n - (b * 10)
    c = n \ 5
    n = n - (c * 5)
    d = n
    x = a + b + c + d
    Print #2, x
    Print #2, a
    Print #2, b
    Print #2, c
    Print #2, d
    Close
    Close
    End Sub

    回覆刪除
  4. 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, n
    a = 0: b = 0: c = 0: d = 0
    Do
    n = n - 50
    a = a + 1
    Loop Until n < 50
    Do
    n = n - 10
    b = b + 1
    Loop Until n < 10
    Do
    n = n - 5
    c = c + 1
    Loop Until n < 5
    d = n
    Print #2, a + b + c + d
    Print #2, a
    Print #2, b
    Print #2, c
    Print #2, d
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  5. 晟晟好,
    你的程式是正確的。
    暑假是你加油的時候哦。

    哲好,
    你的程式是錯的。
    你的迴圈是「後測式迴圈」,也就是至少執行一次的。
    也就是說,你的abc那些數字,至少都是1。
    而改正的方法,超簡單,只要將迴圈條件放到前面就對了。
    do until n<50
    ...
    loop

    暑假剛開始,程式隊的3個隊員,熊掌為你們加油哦。
    而且,你們的學長arro和佑,都上了國立學校哦,為他們加油,
    也是告訴你們,成為隊員努力是有前途的。

    熊掌

    回覆刪除
  6. Dim a(1 To 4), b(4) As Integer
    Private Sub Form_Load()
    Me.Hide
    a(1) = 50: a(2) = 10: a(3) = 5: a(4) = 1
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, x
    For i = 1 To 4
    Do
    If Val(x) >= a(i) Then
    b(i) = b(i) + 1
    x = Val(x) - a(i)
    Else
    Exit Do
    End If
    Loop
    ans = ans + b(i)
    Next i
    Print #2, ans
    For i = 1 To 4
    Print #2, b(i)
    Next i
    Close #2
    Close #1
    End
    End Sub

    回覆刪除