Imports System
Imports System.Linq
Module Module1
'---------------------------------------------------------------
' Function: DivideAmount
'---------------------------------------------------------------
' Given an amount and a list of bills/coins, prints how many of
' each denomination are needed using a greedy algorithm.
'
' The greedy method is optimal for standard currency systems.
'---------------------------------------------------------------
Sub DivideAmount(amount As Integer, denominations As Integer())
Console.WriteLine("Dividing amount: " & amount & Environment.NewLine)
For Each d In denominations
Dim count As Integer = amount \ d ' Integer division
If count > 0 Then
Console.WriteLine($"{d}-unit: {count}")
amount = amount Mod d ' Reduce remaining amount
End If
Next
If amount > 0 Then
Console.WriteLine(Environment.NewLine & "Warning: leftover amount = " & amount)
End If
End Sub
Sub Main()
Dim bills_coins() As Integer = {500, 100, 200, 50, 20, 10, 5, 2, 1}
' VB.NET: sort descending using LINQ
Dim denominations = bills_coins.OrderByDescending(Function(x) x).ToArray()
Dim amount As Integer = 9749
DivideAmount(amount, denominations)
End Sub
End Module
' run:
'
' Dividing amount: 9749
'
' 500-unit: 19
' 200-unit: 1
' 20-unit: 2
' 5-unit: 1
' 2-unit: 2
'