Écrire un programme Java appelé SeqOne
qui demande à l'utilisateur une
taille de tableau, crée un tableau de la longueur demandée contenant
uniquement les chiffres 0 et 1 (le contenu doit être aléatoire), puis
détermine et affiche la distribution des longueurs des séquences de 1
présentes dans un tableau contenant uniquement les entiers 0 et 1. Considérons
par exemple le tableau [0, 1, 1, 1, 0, 0, 1, 1]. Il contient :
package org.apiacoa.teaching.oop;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class SeqOne {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = 0;
while (n <= 0) {
System.out.print("Entrez la taille du tableau : ");
n = scan.nextInt();
}
int[] tableau = new int[n];
// remplissage par des O et 1
Random rng = new Random();
for (int i = 0; i < tableau.length; i++) {
tableau[i] = rng.nextInt(2);
}
// affichage de contrôle
System.out.println(Arrays.toString(tableau));
// on cherche des séquences de 1
// pour l'instant, on n'a pas vu de séquence
int longueur = 0;
// et on n'est donc pas dans une séquence
boolean dansSequence = false;
// au pire, on peut avoir une séquence aussi longue que le tableau
// la case i de nombres indique le nombre de séquences de longueur i+1
int[] nombres = new int[tableau.length - 1];
for (int i = 0; i < tableau.length; i++) {
if (dansSequence) {
if (tableau[i] == 1) {
// un de plus
longueur++;
if (i == tableau.length - 1) {
// dernière case
dansSequence = false;
}
} else {
// fin de la séquence
dansSequence = false;
}
if (!dansSequence) {
System.out.printf("On a trouvé une séquence de longueur %d %n", longueur);
// mise à jour des comptages
for (int j = 0; j < longueur; j++) {
nombres[j] += longueur - j;
}
longueur = 0;
}
} else {
if (tableau[i] == 1) {
// démarrage
longueur = 1;
dansSequence = true;
}
}
}
// affichage des résultats
if (nombres[0] == 0) {
System.out.println("Aucune séquence trouvée");
} else {
System.out.println("Le tableau contient :");
int i = 0;
while (i < nombres.length && nombres[i] != 0) {
System.out.printf("- %d séquence(s) de longueur %d%n", nombres[i], i + 1);
i++;
}
}
scan.close();
}
}