Neulich habe ich mich mit dem Ziegenproblem beschäftigt. Um die Wahrscheinlichkeit mit beliebig vielen Türen und beliebig vielen Versuchen nachvollziehen zu können, habe ich eine Konsolenanwendung dazu geschrieben. Der Code ist simpler als gedacht. Anfangs wollte ich versuchen die Spielshow nachzustellen, ich bemerkte allerdings, nachdem ich die Hälfte des Codes geschrieben habe, dass die gesamte Spielshow nur aus einem Zahlenvergleich besteht.
Ablauf:
Hinter einer Tür ist ein Auto, hinter den anderen befindet sich jeweils eine Ziege. Man wählt eine Zahl zwischen 1 und n (n=Anzahl der Türen), das Auto hat auch eine Zahl im selben Bereich. So hat man zu Anfang eine Chance von 1:n, das Auto zu gewinnen. Wenn der Moderator allerdings alle Türen bis auf 2 aufmacht, die, die ich gewählt habe und eine weitere, muss hinter einer von beiden Türen das Auto sein. Der Moderator fragt, ob ich nun das gewählte Tor wechseln möchte. Nun kann ich mich erneut für eine der beiden Türen entscheiden. Hier besteht beim Wechsel der Auswahl auf die bisher nicht gewählte Tür eine Chance von n-1:n, das Auto zu gewinnen.
Das heißt:
Wenn ich annehme, dass ich jedes mal wechsle, habe ich also am Ende zwei Zahlen, die ich nur miteinander vergleichen muss. Wenn die Zahl der Tür, hinter der das Auto steht ungleich der ist, die ich zu Anfang ausgewählt habe, gehört das Auto mir.
Der Quellcode wäre also simpel:
class Program
{
static void Main(string args)
{
do
{
Random random = new Random();
int max = 0;
int maxtry = 0;
try
{
Console.WriteLine("Wie viele Türen?");
max = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Wieviele Versuche?");
maxtry = Convert.ToInt32(Console.ReadLine());
int autocounter = 0;
for (int x = 1; x <= maxtry; x++)
{
int choose = random.Next(1, max);
int auto = random.Next(1, max);
if (choose != auto)
{
Console.WriteLine("Auto bekommen");
autocounter++;
}
else
{
Console.WriteLine("Auto nicht bekommen!!");
}
}
int percent = autocounter * 100 / maxtry;
Console.WriteLine("Du hast das Auto " + autocounter + " von " + maxtry + "mal bekommen. Das entspricht " + percent + "%");
Console.WriteLine("Noch eine Runde?");
}
catch
{
Console.WriteLine("*Bitte eine gültige Zahl eingeben!!");
}
} while (1 < 2);
}
}







Auf