using System.Collections.Generic;
public static void Main()
for (decimal i = 0; i < 100; i++) {
Console.Write(amount.ToString("C2") + " => ");
var cashAmounts = GetCashAmounts(amount).OrderBy(a => a).Distinct().Take(3).ToList();
cashAmounts.ForEach(a => Console.Write(a.ToString("C2") + " "));
private static IEnumerable<decimal> GetCashAmounts(decimal amount) {
List<decimal> billsYo = new List<decimal>() { 1, 5, 10, 20, 50, 100 };
var roundedUp = Math.Ceiling(amount);
foreach (var bill in billsYo) {
yield return GetFirstMultipleThatCovers(bill, roundedUp);
if (roundedUp > bill && lastBill + bill >= roundedUp)
yield return lastBill + bill;
else if (roundedUp > bill && lastBill * 2 + bill >= roundedUp)
yield return lastBill * 2 + bill;
private static decimal GetFirstMultipleThatCovers(decimal bill, decimal givenAmount) {
while (i * bill < givenAmount) {