C# :: Aufgabe #335

2 Lösungen Lösungen öffentlich

Geburtstags-Paradoxon

Fortgeschrittener - C# von JKooP - 24.10.2020 um 18:45 Uhr
Du feierst eine Geburtstagsparty. Nach und nach kommen immer mehr Gäste.
Während des Wartens stellst du dir die Frage, wie viele der anwesenden Personen ebenfalls heute Geburtstag haben könnten.

Schreibe eine Methode/Funktion, die einen Wert zurückliefert, ab wie vielen Gästen die Wahrscheinlich bei größer 50% liegt, dass mindestens noch ein Gast am gleichen Tag Geburtstag hat.

Bedingungen:
- nur der Tag des Jahres, nicht zusätzlich das Geburtsjahr sollen übereinstimmen
- das Jahr hat konstant 365 Tage
- saisonal bedingte Geburtenraten sollen nicht betrachtet werden

Lösungen:

vote_ok
von Waldgeist (2310 Punkte) - 26.10.2020 um 12:16 Uhr
Hallo,

hier meine Lösung:

Quellcode ausblenden C#-Code
using System;

namespace Aufgabe_335_GeburtstagParadoxon
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int anzahl = 2;
            double wahrscheinlichkeit = 0;

            Console.WriteLine("Dieses Programm berechnet Wahrscheinlichkeiten\n\n");

            while (wahrscheinlichkeit < 0.5)
            {
                double oben = 365;
                double unten = 365;

                for (int i = 364; i >= (365 - (anzahl - 1)); i--)
                {
                    oben = oben * i;
                }

                unten = Math.Pow(unten, anzahl);
                wahrscheinlichkeit = (1 - (oben / unten));

                if (wahrscheinlichkeit <= 0.5)
                {
                    anzahl++;
                }
            }

            Console.WriteLine($"Wenn {anzahl} Personen im Raum sind besteht zu { wahrscheinlichkeit} Prozent die Wahrscheinlichkeit das 2 Personen am selben Tag Geburtstag haben");

            double x = Math.Log(0.5);
            double a = 364;
            double b = 365;
            double t = a / b;
            double y = Math.Log(t);

            anzahl = Convert.ToInt32(x / y);
            Console.WriteLine($"Wenn {anzahl} Personen im Raum sind besteht zu 50% Prozent die Wahrscheinlichkeit das eine 2 Person am selben Tag Geburtstag hat wie Du!!");

            Console.ReadKey();
        }
    }
}
vote_ok
von JKooP (18090 Punkte) - 15.12.2020 um 19:53 Uhr
NET Core 3.x; C# 8.x
Quellcode ausblenden C#-Code
using System.Linq;
using static System.Linq.Enumerable;
using static System.Console;
using static System.Math;

namespace CS_MDL_CORE_Geburtstags_Paradoxon
{
    class Program
    {
        static void Main()
        {
            const double Prob = 50.0;
            WriteLine($"Eine Wahrscheinlichkeit von {Prob}% liegt ab {GetNumOfPers(Prob)} Personen vor.\n");
            Range(5, 95).Where(x => x % 5 == 0).ToList().ForEach(x => WriteLine($"{x,2}%: {GetNumOfPers(x),2} Pers"));
        }
        static double GetProb(int n) => (Pow(365, n) - Range(365 - n + 1, n).Aggregate(1.0, (x, y) => x * y)) / Pow(365, n) * 100;
        static int GetNumOfPers(double p) => Range(1, 365).Where(x => GetProb(x) >= p).FirstOrDefault();
    }
}
1800387

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.