Bonjour,
Je suis en Terminale S et je dois faire un algorithme.
Voici l'énoncé :
On considère un entier naturel n.
En partant de n, on construit une chaîne de nombres de la façon suivante :
Si un nombre k de la chaine est pair, le suivant s'obtient en divisant k par 2.
Si un nombre k de la chaine est impair, le suivant s'obtient en multipliant k par 3 et en ajoutant 1.
La chaine s'arrête quand elle atteint 1. On appelle alors longueur de la chaine le nombre d'entiers nécessaires pour atteindre le nombre 1.
Ecrire un algorithme sur algobox qui demande à l'utilisateur un entier et qui affiche l'integralité de la chaine a partir de cet entier ainsi que sa longueur.
Voici ce que j'ai fait :
Variables
k est du type nombre
m est du type nombre
compteur est du type nombre
debut algorithme
lire k
m prend la valeur floor(k)
afficher m
compteur prend la valeur 1
Tant que (m>1)
debut tant que
si (floor(m/2)==(m/2)) alors
debut si
m prend la valeur m/2
compteur prend la valeur compteur + 1
afficher ->
afficher m
fin si
sinon
debut sinon
m prend la valeur (3*m)+1
compteur prend la valeur compteur +1
afficher ->
afficher m
fin sinon
fin tant que
afficher "algorithme terminé"
afficher "longueur de la liste"
afficher m
fin algorithme
Mais je dois répondre à :
De quel entier (inferieur ou egal à 20) doit-on partir pour obtenir la chaine la plus longue ? Meme question pour un entier naturel inférieur ou egal à 100 (On pourra modifier l'algorithme initial).
Je ne comprend pas quoi modifier dans l'algorithme. Pouvez-vous m'aider ?
Merci.
Odessa.
