C# :: Aufgabe #260
3 Lösungen

Begleichung einer Rechnung ausschließlich mit Münzen
Anfänger - C#
von hollst
- 02.05.2019 um 15:46 Uhr
Angenommen, ihr hättet an der Kasse einen Betrag X zwischen (einschließlich) einem Cent und einem Euro zu bezahlen.
Schreibe ein Program, dass die Anzahl der Möglichkeiten berechnet, X ausschließlich mit 1, 2, 5 und 10 Cent-Münzen zu begleichen.
Beispiel: X = 5 Cent -> 4 Möglichkeiten (5; 2 + 2 + 1; 2 + 1 + 1+ 1; 1 + 1 + 1 + 1 + 1)
Achtung: für einen EURO (100 Cent) gibt es bereits 2.156 Möglichkeiten!
Viel Spaß!
Schreibe ein Program, dass die Anzahl der Möglichkeiten berechnet, X ausschließlich mit 1, 2, 5 und 10 Cent-Münzen zu begleichen.
Beispiel: X = 5 Cent -> 4 Möglichkeiten (5; 2 + 2 + 1; 2 + 1 + 1+ 1; 1 + 1 + 1 + 1 + 1)
Achtung: für einen EURO (100 Cent) gibt es bereits 2.156 Möglichkeiten!
Viel Spaß!
Lösungen:

using static System.Console; using System.Collections.Generic; using System.Text; namespace aufgabe_260 { static class Program { static void Main() { //uint[] EURO_coins = new uint[] { 1, 2, 5, 10, 20, 50, 100, 200 }; uint[] EURO_coins = new uint[] { 1, 2, 5, 10 }; uint[] max_coins = new uint[EURO_coins.Length]; uint target = 100; //1 € for (var i = 0; i < EURO_coins.Length; i++) max_coins[i] = (uint)(target / EURO_coins[i] + 1); List<uint[]> temp = max_coins.AllNumbers(); uint counter = 0; for(var i = 0; i < temp.Count; i++) { uint value = 0; for (var j = 0; j < temp[i].Length; j++) value += EURO_coins[j] * temp[i][j]; if (value == target) { WriteLine(temp[i].ToMyString()); counter++; } } WriteLine($"counter: {counter}"); ReadKey(); } static string ToMyString(this uint[] x) { StringBuilder sb = new StringBuilder(); for(var i = 0; i < x.Length; i++) sb.Append($"{x[i],2} "); return sb.ToString(); } public static List<uint[]> AllNumbers(this uint[] AMAX) //aus aufgabe 226 { List<uint[]> result = new List<uint[]>(); uint maxn = 1; for (var i = 0; i < AMAX.Length; i++) maxn *= AMAX[i]; uint[] A = new uint[AMAX.Length]; for (var i = 0; i < maxn; i++) { uint[] AA = new uint[AMAX.Length]; A.CopyTo(AA, 0); result.Add(AA); for (var j = 0; j < AMAX.Length; j++) if (A[j] < AMAX[j] - 1) { A[j]++; break; } else A[j] = 0; } return result; } } }

using System; namespace ConsoleBegleichungRechnungMuenzen { class Program { static void Main(string[] args) { Console.WriteLine("----- Begleichung einer Rechnung ausschließlich mit Münzen -----"); do { Console.Write("Betrag in cent: "); int betrag; if (int.TryParse(Console.ReadLine(), out betrag)) { int p = GetPossibilities(betrag); Console.WriteLine("Es wurden {0} Möglichkeiten gefunden.", p); } else { break; } } while (true); Console.ReadLine(); } static int GetPossibilities(int betrag) { int current10 = 0; int current5 = 0; int current2 = 0; int current1 = 0; int counter = 0; for (int i10 = 0; i10 <= betrag / 10; i10++) { current10 = i10 * 10; for (int i5 = 0; i5 <= (betrag - current10) / 5; i5++) { current5 = current10 + i5 * 5; for (int i2 = 0; i2 <= (betrag - current5) / 2; i2++) { current2 = current5 + i2 * 2; for (int i1 = 0; i1 <= (betrag - current2); i1++) { current1 = current2 + i1; if (current1 == betrag) { counter++; } } } } } return counter; } } }
Nicht sehr elegant, aber das Ergebnis stimmt.
C#-Code

using System; namespace Aufgabe_260_Konsole { class Program { static void Main(string[] args) { int[,] Varianten = new int[4, 101]; for (int i = 0; i < 101; i++) { Varianten[0, i] = 1; } for (int i = 0; i < 101; i++) { if (i < 2) Varianten[1, i] = Varianten[0, i]; else Varianten[1, i] = Varianten[0, i] + Varianten[1, i - 2]; } for (int i = 0; i < 101; i++) { if (i < 5) Varianten[2, i] = Varianten[1, i]; else Varianten[2, i] = Varianten[1, i] + Varianten[2, i - 5]; } for (int i = 0; i < 101; i++) { if (i < 10) Varianten[3, i] = Varianten[2, i]; else Varianten[3, i] = Varianten[2, i] + Varianten[3, i - 10]; } Console.WriteLine("Programm zur Berechnung der Varianten für Bezahlen einer Summe mit 1,2,5, und 10 Cent Münzen"); Console.WriteLine(); Console.Write("Bitte geben Sie den einen Betrag von 1 bis 100 Cent ein: "); int Betrag = int.Parse(Console.ReadLine()); Console.WriteLine("Es gibt {0} Varianten", Varianten[3, Betrag]); Console.ReadKey(); } } }