logo

Problème 3N+1 en Java

Le Problème 3N+1 est un problème mathématique abstrait qui est une conjecture (non encore prouvée). Il est également connu sous le nom Problème de Collatz. Dans cette section, nous discuterons du problème 3N+1 ainsi que de son programme Java.

La tâche consiste à écrire un programme Java qui lira un entier positif de l'utilisateur et imprimera le 3N+1 séquence à partir de cet entier. Le programme doit également compter et imprimer le nombre de termes dans la séquence.

Trouver la séquence 3N+1

Étant donné un entier positif, N, définissez la séquence 3N+1 à partir de N comme suit :

  • Si N est un nombre pair, divisez N par deux.
  • Si N est un nombre impair, multipliez N par 3 et ajoutez 1.
  • Continuez à générer des nombres de cette manière jusqu'à ce que N devienne égal à 1.

Mathématiquement, nous pouvons définir le problème 3N+1 comme suit :

Problème 3N+1 en Java

Comprenons l'énoncé du problème à travers un exemple.

Supposer, N = 3 , ce qui est un nombre impair. Selon la règle ci-dessus, multipliez N par 3 et ajoutez 1, nous obtenons N = 3*3+1 = 10. Par conséquent, N devient un nombre pair. Maintenant, divisez N par 2. Cela donne N = 10/2 = 5. Continuez le processus jusqu'à ce que N devienne égal à 1. Par conséquent, la séquence 3N+1 sera 3, 10, 5, 16, 8, 4, 2, 1 .

Algorithme de problème 3N+1

Afin de calculer le terme suivant, le programme doit entreprendre différentes actions selon que N est même ou impair . Pour la même chose, nous avions besoin d’une instruction if qui déciderait que N est pair ou impair.

Le seul problème qui reste est celui du comptage. Compter signifie que nous commençons par zéro, et chaque fois que nous avons quelque chose à compter, nous ajoutons 1. Nous avons besoin d'une variable (disons compter) pour compter.

Nous devons encore nous soucier de la toute première étape. Comment pouvons-nous obtenir un entier positif de l’utilisateur ? Si nous lisons simplement un nombre, il est possible que l'utilisateur saisisse un nombre négatif ou zéro. Si nous suivons ce qui se passe lorsque la valeur de N est négative ou nulle, nous verrons que le programme continuera indéfiniment, puisque la valeur de N ne deviendra jamais égale à 1, ce qui n'est pas compatible.

Dans ce cas, le problème n’est probablement pas grave, mais en général, nous devrions essayer d’écrire des programmes infaillibles. Une façon de résoudre ce problème consiste à continuer à lire les nombres jusqu'à ce que l'utilisateur tape un nombre positif.

 Read a Positive integer N from the user while N is not positive: Print an error message; Read another value for N; Let count = 0; while N is not 1: if N is even: Compute N = N/2; else Compute N = 3 * N + 1; Output N; Add 1 to count; Output the count; 

La première boucle while se terminera uniquement lorsque N est un nombre positif, comme requis. Si N n'est pas positif, demandez à l'utilisateur de saisir une autre valeur. Le problème se pose si le deuxième nombre saisi par l’utilisateur est également non positif. L'instruction if n'est exécutée qu'une seule fois, donc le deuxième numéro d'entrée n'est jamais testé.

Avec la boucle while, une fois le deuxième nombre saisi, l'ordinateur revient au début de la boucle et teste si le deuxième nombre est positif. Sinon, il demande à l'utilisateur un troisième numéro et continuera à demander des numéros jusqu'à ce que l'utilisateur saisisse une entrée acceptable.

Implémentons l'algorithme ci-dessus dans un programme Java.

Programme Java problème 3n+1

ThreeNPlusOneProblem.java

 import java.util.Scanner; public class ThreeNPlusOneProblem { public static void main(String args[]) { //variable that denotes the starting point of the sequence int N; //variable to count the number of terms int count; Scanner sc=new Scanner(System.in); System.out.print(&apos;Enter the starting point for the sequence: &apos;); //reads an integer from the user N=sc.nextInt(); while (N <= 0 1 2="=" 0) { system.out.println('the starting point must be positive. please re-enter the number: '); n="sc.nextInt();" } count="0;" executes when is greater than while (n !="1)" if % 2; an odd number else * + 1; system.out.print(n '	'); increments variable by system.out.println(); system.out.println('there are '+count+' terms in sequence.'); end of main() class < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/27/3n-1-problem-java-2.webp" alt="3N+1 Problem in Java"> <hr></=>