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();
}
}
}
