Exercices corrigés Python (Série 9)

20 Sep 2017 20 Sep 2017 85812 vues ESSADDOUKI Mostafa 9 min de lecture

Exercices sur les nombres et les suites

Cette section présente des exercices sur les propriétés des nombres (nombres heureux, nombres distincts) et sur des suites particulières comme la suite de Robinson.

Thèmes abordés Ces exercices mobilisent des techniques fondamentales en Python : la manipulation de chaînes pour décomposer un entier en chiffres, les ensembles pour détecter les doublons ou les cycles, et la construction itérative de suites récurrentes.
 Exercice 1

Nombres heureux

 Niveau : Intermédiaire

Un nombre heureux est un entier qui, lorsqu'on remplace itérativement le nombre par la somme des carrés de ses chiffres, finit par atteindre le chiffre 1.

  Exemple — N = 7

  • 7² = 49
  • 4² + 9² = 16 + 81 = 97
  • 9² + 7² = 81 + 49 = 130
  • 1² + 3² + 0² = 1 + 9 + 0 = 10
  • 1² + 0² = 1

On est arrivé à 1 → N = 7 est heureux.

Travail demandé :

Écrire une fonction heureux(nb) qui détermine si un entier nb est heureux ou non.

Exemples
Entrée
7, 4, 19
Sortie
True, False, True
Cycle de 4 : 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 (revient à 4, jamais 1).
 Exercice 2

Nombres distincts

 Niveau : Débutant

Un entier est dit distinct s'il est composé de chiffres tous différents.

Écrire une fonction estdistinct(nb) qui vérifie et affiche si nb est distinct ou non.

  Exemples

  • N = 1273 → chiffres {1, 2, 7, 3} tous différents → "est distinct"
  • N = 1565 → chiffres {1, 5, 6, 5} — le 5 se répète → "est non distinct"
Exemples
Entrée
1273, 1565
Sortie
1273 est distinct
1565 est non distinct
Explication : 1273 → set("1273") = {'1','2','7','3'}, taille 4 = len("1273") → distinct. 1565 → set("1565") = {'1','5','6'}, taille 3 ≠ len("1565") = 4 → non distinct.
 Exercice 3

Suite de Robinson

 Niveau : Avancé

La suite de Robinson est définie par :

  • U₀ = 0
  • Uₙ se construit en concaténant le nombre d'apparitions de chaque chiffre de Uₙ₋₁ suivi du chiffre lui-même, dans l'ordre décroissant des chiffres, pour tout n > 0.

  Développement de la suite pour n = 5

  • U₀ = 0
  • U₁ = 10  → 1 apparition du chiffre 0
  • U₂ = 1110 → 1 fois le chiffre 1, 1 fois le chiffre 0
  • U₃ = 3110 → 3 fois le chiffre 1, 1 fois le chiffre 0
  • U₄ = 132110 → 1 fois 3, 2 fois 1, 1 fois 0
  • U₅ = 13123110 → 1 fois 3, 1 fois 2, 3 fois 1, 1 fois 0
Travail demandé :

Écrire une fonction robinson(N) calculant le N-ième terme de la suite.

Exemple
Entrée
N = 5
Sortie
U₅ = 13123110

Récapitulatif

ExerciceFonctionnalitéMéthode cléComplexité
Nombres heureuxVérifier si un nombre est heureuxItération + détection de cycle (set ou Floyd)O(k) — k = longueur du cycle
Nombres distinctsVérifier si les chiffres sont uniqueslen(set(ch)) == len(ch)O(d) — d = nb de chiffres
Suite de RobinsonGénérer le n-ième termeComptage + construction en ordre décroissantO(n × log Uₙ)
Points clés à retenir
  • Les nombres heureux illustrent l'importance de la détection de cycles — sans elle, l'algorithme boucle indéfiniment.
  • Pour vérifier l'unicité des chiffres, un ensemble (set) est plus efficace qu'un comptage manuel : O(d) vs O(d²).
  • La suite de Robinson est un exemple de suite auto-descriptive, inspirée du célèbre Look-and-Say de John Conway.
  • La manipulation des chaînes de caractères est essentielle pour décomposer un entier chiffre par chiffre.
  • Le module collections.Counter simplifie considérablement le comptage de chiffres.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.