Imports System
Public Class Coins
Public Shared Sub Main()
Dim AmountToBePaid, ValueOfChoice, i, j, NrOfCoins, NrOfDenominations, NextChange, Subtotal As Integer
Dim Solved, ValidInput As Boolean
Dim Line, Payline, Returnline As String
Dim Denominations(100), Choices(100) As Integer
Dim Units() As String
For i = 1 To 99
Choices(i) = 0
Next
Line = Console.ReadLine()
If Line = "" Then
Console.WriteLine("Enter amount to be paid, followed by the various denominations of coins and banknotes. All integer numbers, comma separated. Then rerun")
End If
Units = Line.Split(",")
ValidInput = True
If Units.Length > 1 Then
For i = 0 To Units.Length - 1
Denominations(i) = Int(Units(i))
Denominations(i + Units.Length - 1) = -Denominations(i)
Next
End If
If Units.Length < 2 Or ValidInput = False Then
Console.WriteLine("Input not valid")
Exit Sub
End If
AmountToBePaid = Denominations(0)
NrOfDenominations = 2 * Units.Length - 2
Solved = False
NrOfCoins = 1
While Solved = False
If Choices(1) = NrOfCoins Then
NrOfCoins = NrOfCoins + 1
For i = 1 To NrOfDenominations
Choices(i) = 0
Next
End If
Subtotal = 0
For i = 1 To NrOfDenominations
If i = NrOfDenominations Then Choices(i) = NrOfCoins - Subtotal
If i = NextChange Then
Choices(i) = Choices(i) + 1
For j = i + 1 To NrOfDenominations
Choices(j) = 0
Next
End If
Subtotal = Subtotal + Choices(i)
If Subtotal = NrOfCoins And Choices(i) <> 0 Then
NextChange = i - 1
End If
Next
ValueOfChoice = 0
For i = 1 To NrOfDenominations
ValueOfChoice = ValueOfChoice + Choices(i) * Denominations(i)
Next
If ValueOfChoice = AmountToBePaid Then Solved = True
End While
Payline = "Pay: "
Returnline = "Return: "
For i = 1 To NrOfDenominations
If Choices(i) > 0 Then
If Denominations(i) > 0 Then
Payline = Payline & Str(Choices(i)) & " x " & Str(Denominations(i)) & " ; "
Else
Returnline = Returnline & Str(Choices(i)) & " x " & Str(-Denominations(i)) & " ; "
End If
End If
Next
Console.WriteLine(Payline)
Console.WriteLine(Returnline)
End Sub
End Class