Vidéo 32 : while : deux exercices¶
Diviser par deux ou retirer 1¶
Observez le motif ci-dessous formé de 10 entiers. On part d’un entier \(a> 0\), ici \(a=81\), et on construit une suite d’entiers ainsi :
81 80 40 20 10 5 4 2 1 0.
Le procédé de construction est défini ainsi :
- si l’entier \(x\) est pair, le successeur de \(x\) de la suite est la moitié de \(x\)
- sinon, ce successeur est \(x-1\) ;
- la suite se termine dès qu’un élément de la suite vaut 0.
Par exemple, dans la suite ci-dessus, le successeur de 80 est 40 car 80 est pair et que sa moitié est 40, et de même le successeur de 5 est 4 car 5 est impair et que \(4=5-1\).
On vous donne un entier \(a\geq 0\) et on vous demande d’afficher la suite générée à partir de \(a\) et de calculer la longueur de la suite ainsi générée. Par exemple, si \(a=79\) vous devez afficher la suite suivante :
79 78 39 38 19 18 9 8 4 2 1 0
et la longueur à calculer est de 12.
Parmi toutes les listes commençant par un entier entre 0 et 1000, quelle est la longueur maximale d’une suite ?
Alternance de parité, version while
¶
On donne une liste L d’entiers et on demande de créer un booléen alterneParite valant True
si les éléments de L se suivent en alternant de parité et False
sinon. On utilisera une boucle while
. Voici des exemples de comportements attendus :
L |
Alternance de parité |
[81, 32, 9, 12] |
True |
[32, 9, 32, 65] |
True |
[32, 9, 31, 82] |
False |
[81] |
True |