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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
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.