C# :: Aufgabe #260

3 Lösungen Lösungen öffentlich

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ß!

Lösungen:

vote_ok
von hollst (12030 Punkte) - 29.05.2019 um 14:36 Uhr
Quellcode ausblenden C#-Code
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;
        }
    }
}
vote_ok
von daniel59 (4150 Punkte) - 23.07.2019 um 12:02 Uhr
Quellcode ausblenden C#-Code
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;
        }
    }
}
1 Kommentar
1x
vote_ok
von Waldgeist (530 Punkte) - 14.11.2019 um 21:09 Uhr
Nicht sehr elegant, aber das Ergebnis stimmt.

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