Private Sub Form_Load() Me.Hide Open App.Path & "\out.txt" For Output As #2 Open App.Path & "\in.txt" For Input As #1 cop = Split("1 5 10 50") Do Until EOF(1) Input #1, p For i = 0 To UBound(cop) tot = p \ Val(cop(i)) If p Mod Val(cop(i)) = 0 Then Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 0 元" Else tot = tot + 1 Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 " & Val(cop(i)) * tot - p & " 元" End If Next a = p '5 s = 1 Do Until s * cop(1) >= a Print #2, cop(1) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(1)) * s & " 元 ; 找 0 元" s = s + 1 Loop '10 s = 1 Do Until s * cop(2) >= a Print #2, cop(2) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(2)) * s & " 元 ; 找 0 元" s = s + 1 Loop '10 & 5 s = 1 Do Until a < 10 If p = (Val(cop(2)) * s) Then Exit Do If (Val(cop(2)) * s - a) < 0 Then mm = a - (Val(cop(2)) * s) Else mm = (Val(cop(2)) * s - a) If mm \ 5 = 0 Then mm = mm \ 5 + 1 Else mm = mm \ 5 If Val(cop(2)) * s + Val(cop(1)) * mm - a < 0 Then mm = mm + 1 Print #2, cop(2) & " * " & s & " + " & cop(1) & " * " & mm & " 元 ; 找 " & Val(cop(2)) * s + Val(cop(1)) * mm - a & " 元" dl: s = s + 1 a = a - 10 Loop a = p Print #2, "-----------------------" Loop Close #1 Close #2 End End Sub ----------------------------- in.txt 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Dim N As Byte Dim Money(4) As Byte Dim Back As Integer Dim total As Integer 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 Money(1) = 1 Money(2) = 5 Money(3) = 10 Money(4) = 50
Call ABC(0, 0, 0, 0, 0)
Close #2 Close #1
End End Sub
Sub ABC(A, ByVal M1, ByVal M5, ByVal M10, ByVal M50)
If A >= N Then total = 1 * M1 + 5 * M5 + 10 * M10 + 50 * M50 Back = total - N
Do p = False If (Back >= 10) And (M10 >= 1) Then M10 = M10 - 1: total = total - 10: Back = total - N: p = True Loop Until p = False
Do p = False If (Back >= 5) And (M5 >= 1) Then M5 = M5 - 1: total = total - 5: Back = total - N: p = True Loop Until p = False
Do p = False If (Back >= 1) And (M1 >= 1) Then M1 = M1 - 1: total = total - 1: Back = total - N: p = True Loop Until p = False
If M1 <> 0 Then ans = "1*" & M1: If M5 <> 0 Or M10 <> 0 Or M50 <> 0 Then ans = ans & "+" If M5 <> 0 Then ans = ans & "5*" & M5: If M10 <> 0 Or M50 <> 0 Then ans = ans & "+" If M10 <> 0 Then ans = ans & "10*" & M10: If M50 <> 0 Then ans = ans & "+" If M50 <> 0 Then ans = ans & "50*" & M50
ans = ans & "=" & total & "找" & Back & "元"
p = False For I = 0 To (List1.ListCount - 1) If List1.List(I) = ans Then p = True Next I
If p = False Then List1.AddItem ans Print #2, ans End If
Private Sub Form_Load() Me.Hide Open App.Path & "\out.txt" For Output As #2 Open App.Path & "\in.txt" For Input As #1 cop = Split("1 5 10 50") Do Until EOF(1) Input #1, p For i = 0 To UBound(cop) tot = p \ Val(cop(i)) If p Mod Val(cop(i)) = 0 Then Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 0 元" Else tot = tot + 1 Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 " & Val(cop(i)) * tot - p & " 元" End If Next a = p '5 s = 1 Do Until s * cop(1) >= a Print #2, cop(1) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(1)) * s & " 元 ; 找 0 元" s = s + 1 Loop '10 s = 1 Do Until s * cop(2) >= a Print #2, cop(2) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(2)) * s & " 元 ; 找 0 元" s = s + 1 Loop '10 & 5 s = 1 Do Until a < 10 If p = (Val(cop(2)) * s) Then Exit Do If (Val(cop(2)) * s - a) < 0 Then mm = a - (Val(cop(2)) * s) Else mm = (Val(cop(2)) * s - a) If mm \ 5 = 0 Then mm = mm \ 5 + 1 Else mm = mm \ 5 If Val(cop(2)) * s + Val(cop(1)) * mm - a < 0 Then mm = mm + 1 Print #2, cop(2) & " * " & s & " + " & cop(1) & " * " & mm & " 元 ; 找 " & Val(cop(2)) * s + Val(cop(1)) * mm - p & " 元" dl: s = s + 1 a = a - 10 Loop a = p Print #2, "-----------------------" Loop Close #1 Close #2 End End Sub
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\out.txt" For Output As #2
Open App.Path & "\in.txt" For Input As #1
cop = Split("1 5 10 50")
Do Until EOF(1)
Input #1, p
For i = 0 To UBound(cop)
tot = p \ Val(cop(i))
If p Mod Val(cop(i)) = 0 Then
Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 0 元"
Else
tot = tot + 1
Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 " & Val(cop(i)) * tot - p & " 元"
End If
Next
a = p
'5
s = 1
Do Until s * cop(1) >= a
Print #2, cop(1) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(1)) * s & " 元 ; 找 0 元"
s = s + 1
Loop
'10
s = 1
Do Until s * cop(2) >= a
Print #2, cop(2) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(2)) * s & " 元 ; 找 0 元"
s = s + 1
Loop
'10 & 5
s = 1
Do Until a < 10
If p = (Val(cop(2)) * s) Then Exit Do
If (Val(cop(2)) * s - a) < 0 Then mm = a - (Val(cop(2)) * s) Else mm = (Val(cop(2)) * s - a)
If mm \ 5 = 0 Then mm = mm \ 5 + 1 Else mm = mm \ 5
If Val(cop(2)) * s + Val(cop(1)) * mm - a < 0 Then mm = mm + 1
Print #2, cop(2) & " * " & s & " + " & cop(1) & " * " & mm & " 元 ; 找 " & Val(cop(2)) * s + Val(cop(1)) * mm - a & " 元"
dl:
s = s + 1
a = a - 10
Loop
a = p
Print #2, "-----------------------"
Loop
Close #1
Close #2
End
End Sub
-----------------------------
in.txt
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1 * 20 = 20 元 ; 找 0 元
回覆刪除5 * 4 = 20 元 ; 找 0 元
10 * 2 = 20 元 ; 找 0 元
50 * 1 = 50 元 ; 找 30 元
5 * 1 + 1 * 15 元 ; 找 0 元
5 * 2 + 1 * 10 元 ; 找 0 元
5 * 3 + 1 * 5 元 ; 找 0 元
10 * 1 + 1 * 10 元 ; 找 0 元
10 * 1 + 5 * 2 元 ; 找 0 元
-----------------------
1 * 21 = 21 元 ; 找 0 元
5 * 5 = 25 元 ; 找 4 元
10 * 3 = 30 元 ; 找 9 元
50 * 1 = 50 元 ; 找 29 元
5 * 1 + 1 * 16 元 ; 找 0 元
5 * 2 + 1 * 11 元 ; 找 0 元
5 * 3 + 1 * 6 元 ; 找 0 元
5 * 4 + 1 * 1 元 ; 找 0 元
10 * 1 + 1 * 11 元 ; 找 0 元
10 * 2 + 1 * 1 元 ; 找 0 元
10 * 1 + 5 * 3 元 ; 找 4 元
10 * 2 + 5 * 1 元 ; 找 14 元
-----------------------
1 * 22 = 22 元 ; 找 0 元
5 * 5 = 25 元 ; 找 3 元
10 * 3 = 30 元 ; 找 8 元
50 * 1 = 50 元 ; 找 28 元
5 * 1 + 1 * 17 元 ; 找 0 元
5 * 2 + 1 * 12 元 ; 找 0 元
5 * 3 + 1 * 7 元 ; 找 0 元
5 * 4 + 1 * 2 元 ; 找 0 元
10 * 1 + 1 * 12 元 ; 找 0 元
10 * 2 + 1 * 2 元 ; 找 0 元
10 * 1 + 5 * 3 元 ; 找 3 元
10 * 2 + 5 * 1 元 ; 找 13 元
-----------------------
1 * 23 = 23 元 ; 找 0 元
5 * 5 = 25 元 ; 找 2 元
10 * 3 = 30 元 ; 找 7 元
50 * 1 = 50 元 ; 找 27 元
5 * 1 + 1 * 18 元 ; 找 0 元
5 * 2 + 1 * 13 元 ; 找 0 元
5 * 3 + 1 * 8 元 ; 找 0 元
5 * 4 + 1 * 3 元 ; 找 0 元
10 * 1 + 1 * 13 元 ; 找 0 元
10 * 2 + 1 * 3 元 ; 找 0 元
10 * 1 + 5 * 3 元 ; 找 2 元
10 * 2 + 5 * 1 元 ; 找 12 元
-----------------------
1 * 24 = 24 元 ; 找 0 元
5 * 5 = 25 元 ; 找 1 元
10 * 3 = 30 元 ; 找 6 元
50 * 1 = 50 元 ; 找 26 元
5 * 1 + 1 * 19 元 ; 找 0 元
5 * 2 + 1 * 14 元 ; 找 0 元
5 * 3 + 1 * 9 元 ; 找 0 元
5 * 4 + 1 * 4 元 ; 找 0 元
10 * 1 + 1 * 14 元 ; 找 0 元
10 * 2 + 1 * 4 元 ; 找 0 元
10 * 1 + 5 * 3 元 ; 找 1 元
10 * 2 + 5 * 1 元 ; 找 11 元
-----------------------
1 * 25 = 25 元 ; 找 0 元
5 * 5 = 25 元 ; 找 0 元
10 * 3 = 30 元 ; 找 5 元
50 * 1 = 50 元 ; 找 25 元
5 * 1 + 1 * 20 元 ; 找 0 元
5 * 2 + 1 * 15 元 ; 找 0 元
5 * 3 + 1 * 10 元 ; 找 0 元
5 * 4 + 1 * 5 元 ; 找 0 元
10 * 1 + 1 * 15 元 ; 找 0 元
10 * 2 + 1 * 5 元 ; 找 0 元
10 * 1 + 5 * 3 元 ; 找 0 元
10 * 2 + 5 * 1 元 ; 找 10 元
緣尉好,
回覆刪除程式分段解決問題,思緒會容易清晰,程式正確,很好。
Dim N As Byte
回覆刪除Dim Money(4) As Byte
Dim Back As Integer
Dim total As Integer
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
Money(1) = 1
Money(2) = 5
Money(3) = 10
Money(4) = 50
Call ABC(0, 0, 0, 0, 0)
Close #2
Close #1
End
End Sub
Sub ABC(A, ByVal M1, ByVal M5, ByVal M10, ByVal M50)
If A >= N Then
total = 1 * M1 + 5 * M5 + 10 * M10 + 50 * M50
Back = total - N
Do
p = False
If (Back >= 10) And (M10 >= 1) Then M10 = M10 - 1: total = total - 10: Back = total - N: p = True
Loop Until p = False
Do
p = False
If (Back >= 5) And (M5 >= 1) Then M5 = M5 - 1: total = total - 5: Back = total - N: p = True
Loop Until p = False
Do
p = False
If (Back >= 1) And (M1 >= 1) Then M1 = M1 - 1: total = total - 1: Back = total - N: p = True
Loop Until p = False
If M1 <> 0 Then ans = "1*" & M1: If M5 <> 0 Or M10 <> 0 Or M50 <> 0 Then ans = ans & "+"
If M5 <> 0 Then ans = ans & "5*" & M5: If M10 <> 0 Or M50 <> 0 Then ans = ans & "+"
If M10 <> 0 Then ans = ans & "10*" & M10: If M50 <> 0 Then ans = ans & "+"
If M50 <> 0 Then ans = ans & "50*" & M50
ans = ans & "=" & total & "找" & Back & "元"
p = False
For I = 0 To (List1.ListCount - 1)
If List1.List(I) = ans Then p = True
Next I
If p = False Then
List1.AddItem ans
Print #2, ans
End If
Else
Call ABC(A + Money(4), M1, M5, M10, M50 + 1)
Call ABC(A + Money(3), M1, M5, M10 + 1, M50)
Call ABC(A + Money(2), M1, M5 + 1, M10, M50)
Call ABC(A + Money(1), M1 + 1, M5, M10, M50)
End If
End Sub
--------------------
in.txt
10
--------------------
out.txt
50*1=50找40元
10*1=10找0元
5*2=10找0元
1*5+5*1=10找0元
1*10=10找0元
--------------------
in.txt
15
--------------------
out.txt
50*1=50找35元
10*2=20找5元
5*1+10*1=15找0元
1*5+10*1=15找0元
5*3=15找0元
1*5+5*2=15找0元
1*10+5*1=15找0元
1*15=15找0元
--------------------
in.txt
20
--------------------
out.txt
50*1=50找30元
10*2=20找0元
5*2+10*1=20找0元
1*5+5*1+10*1=20找0元
1*10+10*1=20找0元
5*4=20找0元
1*5+5*3=20找0元
1*10+5*2=20找0元
1*15+5*1=20找0元
1*20=20找0元
--------------------
in.txt
25
--------------------
out.txt
50*1=50找25元
10*3=30找5元
5*1+10*2=25找0元
1*5+10*2=25找0元
5*3+10*1=25找0元
1*5+5*2+10*1=25找0元
1*10+5*1+10*1=25找0元
1*15+10*1=25找0元
5*5=25找0元
1*5+5*4=25找0元
1*10+5*3=25找0元
1*15+5*2=25找0元
1*20+5*1=25找0元
1*25=25找0元
--------------------
我的方法是先找出所有可能,
然後再由找回的錢去,
退回去,
EX:
1*24+10*1=34找9元
再由9元去除1元
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\out.txt" For Output As #2
Open App.Path & "\in.txt" For Input As #1
cop = Split("1 5 10 50")
Do Until EOF(1)
Input #1, p
For i = 0 To UBound(cop)
tot = p \ Val(cop(i))
If p Mod Val(cop(i)) = 0 Then
Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 0 元"
Else
tot = tot + 1
Print #2, cop(i) & " * " & tot & " = " & Val(cop(i)) * tot & " 元 ; 找 " & Val(cop(i)) * tot - p & " 元"
End If
Next
a = p
'5
s = 1
Do Until s * cop(1) >= a
Print #2, cop(1) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(1)) * s & " 元 ; 找 0 元"
s = s + 1
Loop
'10
s = 1
Do Until s * cop(2) >= a
Print #2, cop(2) & " * " & s & " + " & cop(0) & " * " & a - Val(cop(2)) * s & " 元 ; 找 0 元"
s = s + 1
Loop
'10 & 5
s = 1
Do Until a < 10
If p = (Val(cop(2)) * s) Then Exit Do
If (Val(cop(2)) * s - a) < 0 Then mm = a - (Val(cop(2)) * s) Else mm = (Val(cop(2)) * s - a)
If mm \ 5 = 0 Then mm = mm \ 5 + 1 Else mm = mm \ 5
If Val(cop(2)) * s + Val(cop(1)) * mm - a < 0 Then mm = mm + 1
Print #2, cop(2) & " * " & s & " + " & cop(1) & " * " & mm & " 元 ; 找 " & Val(cop(2)) * s + Val(cop(1)) * mm - p & " 元"
dl:
s = s + 1
a = a - 10
Loop
a = p
Print #2, "-----------------------"
Loop
Close #1
Close #2
End
End Sub