using System;
using System.Linq;
class Program
{
/*
* 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.
*/
static void DivideAmount(int amount, int[] denominations)
{
Console.WriteLine($"Dividing amount: {amount}\n");
foreach (int d in denominations)
{
int count = amount / d; // how many of this denomination
if (count > 0)
{
Console.WriteLine($"{d}-unit: {count}");
amount %= d; // reduce remaining amount
}
}
if (amount > 0)
{
Console.WriteLine($"\nWarning: leftover amount = {amount}");
}
}
static void Main()
{
int[] bills_coins = { 500, 100, 200, 50, 20, 10, 5, 2, 1 };
// C#: sort descending using LINQ
int[] denominations = bills_coins
.OrderByDescending(x => x)
.ToArray();
int amount = 9749;
DivideAmount(amount, denominations);
}
}
/*
run:
Dividing amount: 9749
500-unit: 19
200-unit: 1
20-unit: 2
5-unit: 1
2-unit: 2
*/