Geburtstagszwillinge (Simulationen)
An einer Party nehmen 30 Gäste teil. Der Veranstalterin fällt auf, dass zwei Personen am selben Tag Geburtstag haben.
Die Gastgeberin fragt sich nun, wie viele Leute normalerweise nötig sind, damit zwei Gäste am selben Tag Geburtstag haben.
Theoretisch können dies bis zu 366 Personen sein; die 366. Person hat dann bestimmt einen bereits "aufgetretenen" Geburtstag (Schalttage vernachlässigt).
Simulieren Sie eine Party und zählen Sie dabei, wie viele Personen es braucht, bis sich zum ersten Mal ein Geburtstag wiederholt. Starten Sie danach 10 000 solcher Simulationen und bilden Sie den Mittelwert: Wie viele Personen braucht es im Durchschnitt an einer Party, damit zwei Gäste am selben Tag Geburtstag feiern?
0 Kommentare
2 Lösung(en)
public class GeburtstagsZwillinge {
public static void main(String[] args) {
new GeburtstagsZwillinge().top(); }
final int TAGE_IM_JAHR = 365;
final int TOTAL_PARTIES = 10000;
void top() {
int summeAllerGaeste = 0; // Ueber alle Partys
int partyNummer = 1;
while(partyNummer <= TOTAL_PARTIES) {
summeAllerGaeste = summeAllerGaeste + einzelParty();
partyNummer = partyNummer + 1; }
double schnitt = (double) summeAllerGaeste / TOTAL_PARTIES;
System.out.println("Im Schnitt sind " + schnitt +
" Personen nötig, zwei gleiche Geburtstage zu erhalten."); }
/**
* Wie wiele personen sind nötig, damit an einer Party zwei Personen
* den selben Geburtstag feiern können.
* @return Anzahl (2..366)
*/
boolean [] geburtstagExistiert = new boolean[TAGE_IM_JAHR];
int einzelParty() {
geburtstagsListeLeeren();
int tag = zufallsTag();
int personen = 1;
while(!geburtstagExistiert[tag]) {
geburtstagExistiert[tag] = true;
tag = zufallsTag();
personen = personen + 1; }
return personen; }
// Erzeuge einen Zufallstag zwischen 0 und (inkl.) 364
int zufallsTag() {
return (int) (Math.random() * TAGE_IM_JAHR ); }
void geburtstagsListeLeeren() {
Arrays.fill(geburtstagExistiert, false); }
} // end of class GeburtstagsZwillinge
Array.prototype.avg = function() {
let sum = this.reduce((a, b) => a + b, 0);
return sum / this.length;
}
function getBirthdayTwins() {
let party = [], guest;
while (party.indexOf(guest = Math.floor((Math.random() * 366) + 1)) == -1)
party.push(guest);
return party.length + 1; // der zwilling ist ja auch gast!
}
// 10.000 mal testen und aufzeichnen
let parties = [];
for (i = 1; i <= 1e4; i++) parties.push(getBirthdayTwins());
// ausgabe
console.log(`Im Schnitt braucht es ${Math.floor(parties.avg())} Gäste,
damit zwei von ihnen den selben Geburtstag haben.`); // lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
Verifikation/Checksumme:
Circa 24 bis 25 Personen sind nötig, damit mit Wahrscheinlichkeit > 50% zwei von ihnen am selben Tag Geburtstag feiern.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | aadv-mxmq |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |