using System.Collections.Generic;
public static void Main()
Monnaie m = MonnaieOptimale(101);
Console.WriteLine("Impossible");
Console.WriteLine(m.ToString());
private static Dictionary<long, long> MonnaieOptimale(long s, List<long> billsFaceAmounts)
if(billsFaceAmounts.Count == 0)
Dictionary<long, long> bills = new Dictionary<long, long>();
foreach (int billFaceAmount in billsFaceAmounts)
bills[billFaceAmount] = 0;
foreach (int billFaceAmount in billsFaceAmounts)
if(billFaceAmount > rest)
long billNumber = rest / billFaceAmount;
bills[billFaceAmount] = billNumber;
rest = rest - (billNumber * billFaceAmount);
return MonnaieOptimale(s, billsFaceAmounts.GetRange(1, billsFaceAmounts.Count - 1));
private static Monnaie MonnaieOptimale(long s)
List<long> billsFaceAmounts = new List<long>() {10, 5, 2};
Dictionary<long, long> bills = MonnaieOptimale(s, billsFaceAmounts);
Monnaie m = new Monnaie();
m.Billet10 = bills.ContainsKey(10) ? bills[10] : 0;
m.Billet5 = bills.ContainsKey(5) ? bills[5] : 0;
m.Piece2 = bills.ContainsKey(2) ? bills[2] : 0;
public override string ToString()
return Billet10 + " billet(s) de 10" + Environment.NewLine + Billet5 + " billet(s) de 5" + Environment.NewLine + Piece2 + " pieces(s) de 2";