logo

Problema 3N+1 in Java

IL Problema 3N+1 è un problema matematico astratto che è una congettura (non ancora dimostrata). È anche noto come Problema di Collatz. In questa sezione discuteremo il problema 3N+1 insieme al suo programma Java.

Il compito è scrivere un programma Java che leggerà un intero positivo dall'utente e stamperà il file 3N+1 sequenza a partire da quell'intero. Il programma dovrebbe anche contare e stampare il numero di termini nella sequenza.

Trovare la sequenza 3N+1

Dato un intero positivo, N, definire la sequenza 3N+1 partendo da N come segue:

  • Se N è un numero pari, dividi N per due.
  • Se N è un numero dispari, moltiplica N per 3 e aggiungi 1.
  • Continua a generare numeri in questo modo finché N non diventa uguale a 1.

Matematicamente possiamo definire il problema 3N+1 come segue:

Problema 3N+1 in Java

Capiamo l'affermazione del problema attraverso un esempio.

Supponiamo, N = 3 , che è un numero dispari. Secondo la regola sopra, moltiplichiamo N per 3 e aggiungiamo 1, otteniamo N = 3*3+1 = 10. Pertanto, N diventa un numero pari. Ora dividiamo N per 2. Si ottiene N = 10/2 = 5. Continua il processo finché N diventa uguale a 1. Quindi, la sequenza 3N+1 sarà 3, 10, 5, 16, 8, 4, 2, 1 .

Algoritmo del problema 3N+1

Per poter calcolare il termine successivo, il programma deve intraprendere azioni diverse a seconda che N È Anche O strano . Per lo stesso motivo, abbiamo richiesto un'istruzione if che stabilisca che N è pari o dispari.

L’unico problema che rimane è contare. Contare significa che iniziamo da zero e ogni volta che abbiamo qualcosa da contare, aggiungiamo 1. Abbiamo bisogno di una variabile (ad esempio contare) per eseguire il conteggio.

Dobbiamo ancora preoccuparci del primo passo. Come possiamo ottenere un numero intero positivo dall'utente? Se leggiamo semplicemente un numero, è possibile che l'utente digiti un numero negativo o zero. Se seguiamo cosa succede quando il valore di N è negativo o zero, vedremo che il programma andrà avanti all'infinito, poiché il valore di N non diventerà mai uguale a 1 che non è compatibile.

In questo caso probabilmente il problema non è grave, ma in generale dovremmo provare a scrivere programmi che siano infallibili. Un modo per risolvere questo problema è continuare a leggere i numeri finché l'utente non digita un numero positivo.

 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; 

Il primo ciclo while terminerà solo quando N sarà un numero positivo, come richiesto. Se N non è positivo, chiedi all'utente di inserire un altro valore. Il problema sorge se anche il secondo numero inserito dall'utente è non positivo. L'istruzione if viene eseguita solo una volta, quindi il secondo numero di input non viene mai testato.

Con il ciclo while, dopo aver inserito il secondo numero, il computer torna all'inizio del ciclo e verifica se il secondo numero è positivo. In caso contrario, chiede all'utente un terzo numero e continuerà a chiedere numeri finché l'utente non immette un input accettabile.

Implementiamo l'algoritmo sopra in un programma Java.

Programma Java con problemi 3n+1

TreNPlusUnoProblem.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></=>