Paradoks dnia urodzin związany jest z odpowiedzią na pytanie ile osób jest potrzebnych do tego, żeby prawdopodobieństwo, iż przynajmniej dwie z nich mają urodziny tego samego dnia było większe od 0,5. Odpowiedź jest zaskakująca, wystarczy 23 osoby. Chcemy napisać metodę która wykona
n prób i zwróci nam średnią liczbę osób, dla których spełniony jest nasz warunek (dwie z nich mają urodziny tego samego dnia). Dla uproszczenia daty urodzin będziemy zapisywać w 365 elementowym wektorze wartości logicznych.
// wykorzystujemy klasę Scanner z pakietu java.util
import java.util.*;
/**
* Paradoks dnia urodzin
* @author kodatnik.blogspot.com
*/
public class ParadoksDniaUrodzin {
// metoda zwraca średnią liczbę osób dla n prób (parametr wywołania)
// potrzebnych do tego aby dwie z nich miały tego samego dnia urodziny
public static double paradoks(int liczbaProb) {
// zmienne okreslające ilość dni w roku oraz licznik osób
int n = 365;
int licznik = 0;
// wykonujemy tyle prób ile chce użytkownik
for (int i =0; i< liczbaProb; i++) {
// tworzymy wektor z poszczególnymi dniami roku (domyślnie false)
boolean[] dzienUrodzin = new boolean[n];
// w pętli działającej dotąd, aż nie znajdziemy dwóch osób z taką samą datą urodzin
while (true) {
// zwiększamy licznik osób o jeden
licznik++;
// losujemy liczbę z zakresu od 0 do 364 (indeksy tablicy)
int los = (int) (n * Math.random());
// jeśli jest już osoba o takim samym dniu urodzin kończymy pętlę
if (dzienUrodzin[los]) break;
// jeśli nie wpisujemy true w odpowiedni dzień
dzienUrodzin[los] = true;
}
}
// zwracamy średnią liczbę osób (wszystkie / liczba prób)
return ((double) licznik) / liczbaProb;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print ("Podaj liczbę prób: " );
// pobieramy od użytkownika liczbę prób
int liczba = sc.nextInt();
// wyświetlamy na ekranie średnią liczbę osób dla wszystkich prób
System.out.println("Średnia liczba osób: " + paradoks(liczba));
}
}
Uruchomiona aplikacja:
Podaj liczbę prób: 100
Średnia liczba osób: 23.01
1 Komentarz - Paradoks dnia urodzin
nie wiedzialem dzieki
Prześlij komentarz
Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)