Adloun

programmation Java (école d'ingénieur) · Chapitre 3 · Exercice de TD

Jeu de devinette

Instructions de contrôle · niveau 2

Énoncé

Le programme choisit un nombre secret entre et . Le joueur propose des nombres ; le programme répond « Trop petit » ou « Trop grand », jusqu'à ce qu'il trouve, puis affiche le nombre d'essais. Quelle boucle convient ? Quelle stratégie garantit de trouver en au plus essais ?

Corrigé

On propose au moins une fois : boucle do … while.


import java.util.Scanner;

public class Devinette {
    public static void main(String[] args) {
        Scanner clavier = new Scanner(System.in);
        int secret = 37;           // en vrai : (int) (Math.random() * 100) + 1
        int essais = 0;
        int proposition;
        do {
            System.out.print("Votre proposition : ");
            proposition = clavier.nextInt();
            essais++;
            if (proposition < secret) {
                System.out.println("Trop petit");
            } else if (proposition > secret) {
                System.out.println("Trop grand");
            }
        } while (proposition != secret);
        System.out.println("Gagné en " + essais + " essais !");
    }
}

Avec les propositions , , :


Votre proposition : 50
Trop grand
Votre proposition : 25
Trop petit
Votre proposition : 37
Gagné en 3 essais !

La bonne stratégie propose toujours le milieu de l'intervalle encore possible : chaque réponse divise par deux le nombre de candidats. Il y en a , puis au plus , , , , , , : au septième essai, il ne reste qu'un candidat. C'est la recherche dichotomique, que le livre Algorithmique étudie en détail.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →