C# :: Aufgabe #316 :: Lösung #1

2 Lösungen Lösungen öffentlich
#316

Abschätzung der Gewinnchancen eines KENO-Types

Anfänger - C# von hollst - 08.05.2020 um 22:39 Uhr
Zur Erinnerung, was ist KENO: Aus 70 Zahlen werden 20 Gewinnzahlen per Zufallsgenerator ermittelt.
Es gibt die KENO-Typen 2, 3 ... 10, d. h. man kann 2, 3 ... 10 Zahlen aus den Zahlen 1 ... 70 wählen.

Bei KENO-Typ N können 0, 1 ... N gewählte Zahlen in den 20 gelosten Gewinnzahlen enthalten sein
(je mehr, desto höher natürlich der Gewinn).

Die Programmieraufgabe bestehe darin, mittels stochastischer Simulation die Wahrscheinlichkeit dafür abzuschätzen,
wie hoch die Chance ist, bei KENO-Typ N, 0, 1, 2 ... oder gar N Richtige auf seinem Tippzettel zu haben?

Die exakten Werte könnt ihr u. a. z. B. auf
https://www.sachsenlotto.de/portal/spiele/keno/gewinnquoten.jsp
nachsehen.
#1
vote_ok
von JKooP (18090 Punkte) - 23.05.2020 um 10:08 Uhr
NET Core 3.x

Quellcode ausblenden C#-Code
using System;
using System.Linq;

namespace CS_Aufgabe_316_Keno
{

    public enum KenoTypen
    {
        Typ2 = 2, Typ3, Typ4, Typ5, Typ6, Typ7, Typ8, Typ9, Typ10,
    }

    class Program
    {
        static void Main(string[] args)
        {
            const int AnzahlZiehungen = 1_000_000;
            const KenoTypen KenoTyp = KenoTypen.Typ8;

            var arrRichtige = Keno(KenoTyp, AnzahlZiehungen);

            Console.WriteLine($"KENO {KenoTyp}:\n");

            for (int i = 0; i < arrRichtige.Length; i++)
            {
                Console.WriteLine($"{i,2}: {100 * arrRichtige[i] / (double)AnzahlZiehungen,8:F5} %");
            }
        }

        static int[] Keno(KenoTypen kenoTyp, int anzahlZiehungen)
        {
            var anzahlGetippteZahlen = (int)kenoTyp;

            var arrRichtige = new int[anzahlGetippteZahlen + 1];

            var listeGewinnzahlen = Enumerable.Range(1, 70).OrderBy(x => Guid.NewGuid()).Take(20);

            var listeGetippteZahlen = Enumerable.Range(1, 70).OrderBy(x => Guid.NewGuid()).Take(anzahlGetippteZahlen).ToList();

            for (var i = 0; i < anzahlZiehungen; i++)
            {
                arrRichtige[listeGewinnzahlen.Intersect(listeGetippteZahlen).Count()]++;
            }
            return arrRichtige;
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben