rendered paste bodyimport 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<Integer> 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))));
}
}