Adloun

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

Le plus long vol de Syracuse

Instructions de contrôle · niveau 2

Énoncé

Pour chaque entier de départ entre et , calculer le nombre d'étapes de la suite de Syracuse pour atteindre . Quel départ donne le vol le plus long, et en combien d'étapes ? Pourquoi est-il prudent de calculer la suite dans un long ?

Corrigé


public class SyracuseRecord {
    public static void main(String[] args) {
        int meilleur = 1, record = 0;
        for (int depart = 1; depart <= 100; depart++) {
            long n = depart;
            int etapes = 0;
            while (n != 1) {
                n = (n % 2 == 0) ? n / 2 : 3 * n + 1;
                etapes++;
            }
            if (etapes > record) {
                record = etapes;
                meilleur = depart;
            }
        }
        System.out.println("Vol le plus long jusqu'à 100 : " + meilleur + " (" + record + " étapes)");
    }
}

Vol le plus long jusqu'à 100 : 97 (118 étapes)

Une boucle for sur les départs (nombre connu), une boucle while pour chaque vol (nombre inconnu), et le schéma du maximum, qui retient aussi qui réalise le maximum. Les valeurs intermédiaires montent très haut ( pour ) ; pour des départs plus grands, elles dépassent la capacité d'un int, et le dépassement silencieux fausserait tout : le long est une précaution.

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 →