Notre monde contient de nombreuses énigmes mathématiques intéressantes, dont beaucoup peuvent être exprimées sous forme de programmes informatiques. Le problème de la grêle est l’un des problèmes les plus intéressants.

Le problème peut être exprimé comme suit:

Choisissez un entier positif et appelez-le n.
Si n est pair, divisez-le par deux.
Si n est impair, multipliez-le par trois et ajoutez-en un.
Continuez ce processus jusqu'à ce que n soit égal à un.

L'exemple suivant, commençant par le numéro 15, illustre ce processus:

15 is odd, so I make 3n+1: 46
46 is even, so I take half: 23
23 is odd, so I make 3n+1: 70
70 is even, so I take half: 35
35 is odd, so I make 3n+1: 106
106 is even, so I take half: 53
53 is odd, so I make 3n+1: 160
160 is even, so I take half: 80
80 is even, so I take half: 40
40 is even, so I take half: 20
20 is even, so I take half: 10
10 is even, so I take half: 5
5 is odd, so I make 3n+1: 16
16 is even, so I take half: 8
8 is even, so I take half: 4
4 is even, so I take half: 2
2 is even, so I take half: 1

Comme vous pouvez le constater à partir de cet exemple, les chiffres montent et descendent, mais finalement, du moins pour tous ceux qui ont déjà été essayés, se termine en 1. À certains égards, ce processus évoque la formation de grêle, qui sont portés par les vents encore et encore avant qu'ils ne descendent finalement au sol. En raison de cette analogie, cette séquence de nombres est généralement appelée séquence de Hailstone, bien qu'elle porte également de nombreux autres noms.

Ecrivez un programme ConsoleProgram qui lit un numéro de l’utilisateur puis affiche la séquence de Hailstone pour ce numéro, suivi d’une ligne indiquant le nombre de pas effectués pour atteindre 1. Par exemple, votre programme devrait pouvoir produire un exemple d’exécution qui ressemble comme ça:

La chose fascinante à propos de ce problème est que personne n’a encore été en mesure de prouver qu’il s’arrête toujours. Le nombre d'étapes dans le processus peut certainement devenir très grand. Combien de pas, par exemple, votre programme prend-il lorsque n est 27?

Vérification paire ou impaire

Afin de résoudre le problème de la grêle, nous allons avoir besoin de déterminer si un entier est pair ou impair. En plus des opérateurs habituels que vous connaissez et aimez (comme les langages de programmation +, -, * et /), vous disposez d'un opérateur restant: %.

a % b
Renvoie la valeur restante lorsque vous diviseza par b. Par exemple 10 % 3 est 1 parce que lorsque vous divisez 10 par 3, vous obtenez 3 avec 1 reste.

Lorsque vous divisez un nombre par 2, le reste est 0 si le nombre est pair et 1 si le nombre est impair. Ainsi:

n % 2 == 0
Est un test pour savoir si n est pair