C++ :: Aufgabe #308

1 Lösung Lösung ö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:

1 Kommentar
vote_ok
von JKooP (18090 Punkte) - 15.12.2020 um 19:55 Uhr
C++ 11
Quellcode ausblenden C-Code
#include <iostream>
#include <iomanip>
using namespace std;

double get_prob(const int& n) {
	auto p{ 1.0 };
	for (auto i = 365 - n + 1; i <= 365; i++) p *= i;
	return (pow(365, n) - p) / pow(365, n) * 100;
}

int get_number_of_persons(const double& p) {
	for (auto k = 1; k <= 366; k++)
		if (get_prob(k) >= p) return k;
	return 0;
}

int main()
{
	const auto& prob{ 50.0 };
	cout << "Eine Wahrscheinlichkeit von " << prob << "% liegt ab " << get_number_of_persons(prob) << " Personen vor.\n\n";
	for (auto i = 5; i < 100; i+=5)
		cout << setw(2) << i << "%: " << setw(2) << get_number_of_persons(i) << " Pers" << endl;
}