import java.math.BigDecimal; import java.util.HashSet; import java.util.Random; public class MainTp1Math { /** * @param args */ public static void main(String[] args) { question1a(); question1b(); question1c(); // question2a(); // question2b(); // question3a(); // question3b(); } //========================================================================== // Début Question 1a //========================================================================== private static void question1a() { System.out.print("1a: "); calculAnniversaire(30); } public static void calculAnniversaire(int nb) { BigDecimal p = new BigDecimal(1); for (double n = 364; n > 365 - nb; n--) { //p *= n / 365.; p = p.multiply(BigDecimal.valueOf(n/365.)); } p = (BigDecimal.valueOf(1).subtract(p)).multiply(BigDecimal.valueOf(100)); System.out.print("Pour "+nb+" personnes, il y a "+p+"% de chance d'avoir une collition\n"); } //========================================================================== // Début Question 1b //========================================================================== private static void question1b() { for (int i = 5; i < 405; i += 5) { System.out.print("1b: "); calculAnniversaire(i); } } // ========================================================================== // Début Question 1c // ========================================================================== private static void question1c() { Random gen = new Random(System.currentTimeMillis()); int nbDoubles = 0; HashSet dates = new HashSet<>(); for (int i = 0; i < 1000; i++) { // faire l'expérience 1000 fois for (int j = 0; j < 30; j++) { // générer 30 fois dates.add(gen.nextInt(365)); } if (dates.size() != 30) nbDoubles++; dates.clear(); } System.out.printf("\n1C:\nIl y a eu %d doublons dans les 1000 expériences, ce qui est un pourcentage de %f%%",nbDoubles, nbDoubles / 10.); } // ========================================================================== // Début Question 2 // ========================================================================== private static final class ResultatQ2 { public ResultatQ2(char meneur, int changements, int affiles) { this.meneur = meneur; this.changements = changements; this.affiles = affiles; } public char meneur; public int changements; public int affiles; } //========================================================================== // Début Question 2a //========================================================================== private static void question2a() { ResultatQ2 res = question2_test(); System.out.format("\n\n2a: Meneur = %c, Changements = %d, Affilés = %d\n", res.meneur, res.changements, res.affiles); } private static ResultatQ2 question2_test() { char meneur = '\0'; int affiles = 0, changements = 0, nbP = 0, nbF = 0; Random gen = new Random(); for (int i = 0; i < 1000; i++) { // incrémentation des nombres if (gen.nextInt(2) == 0) nbP++; else nbF++; // detection d'un changement if (i == 0) { meneur = nbP > nbF ? 'P' : 'F'; } else { if (meneur == 'P' && nbF >= nbP) { changements++; meneur = 'F'; } else if (meneur == 'F' && nbP >= nbF) { changements++; meneur = 'P'; } else if (nbP == nbF) { affiles = 0; meneur = '\0'; } else { affiles++; } } } return new ResultatQ2(meneur, changements, affiles); } // ========================================================================== // Début Question 2b // ========================================================================== private static void question2b() { double x = 0; for (int i = 0; i < 20; i++) { x += question2_test().affiles; } System.out.format("\n2b: Moyenne = %.2f\n", x / 20); } // ========================================================================== // Début Question 3a // ========================================================================== private static final void question3a() { for (int i = 1; i <= 100; i++) { System.out.println("3a: " + question3a_cat(i)); } } private static BigDecimal question3a_cat(int n) { return BigDecimal.valueOf(1. / ((double) n + 1.)).multiply( choisir(n, 2 * n)); } // ========================================================================== // Début Question 3b // ========================================================================== private static void question3b() { for (int i = 1; i <= 100; i++) { System.out.println("3b: " + question3b_cat(i)); } } private static BigDecimal question3b_cat(int n) { return BigDecimal.valueOf((4. * n - 2) / ((double) n + 1.)).multiply(question3a_cat(n - 1)); } //========================================================================== // Début Question 3c // ========================================================================== private static void question3c() { for (int i = 1; i <= 5; i++) { System.out.println(question3c_cat(i)); } } private static BigDecimal question3c_cat(int n) { BigDecimal cat = BigDecimal.ONE; return cat; } private static BigDecimal fact(int n) { BigDecimal fact = BigDecimal.ONE; for (int i = 1; i <= n; i++) { fact = fact.multiply(BigDecimal.valueOf(i)); } return fact; } private static BigDecimal choisir(int r, int n) { return fact(n).divide((fact(r).multiply(fact(n - r)))); } }