logo

Problema 3N+1 a Java

El Problema 3N+1 és un problema matemàtic abstracte que és una conjectura (encara no provada). També es coneix com Problema de Collatz. En aquesta secció, parlarem del problema 3N+1 juntament amb el seu programa Java.

mylivecricket.

La tasca és escriure un programa Java que llegeixi un nombre enter positiu de l'usuari i imprimeixi el 3N+1 seqüència a partir d'aquest nombre enter. El programa també hauria de comptar i imprimir el nombre de termes de la seqüència.

Trobar la seqüència 3N+1

Donat un nombre enter positiu, N, definiu la seqüència 3N+1 a partir de N de la següent manera:

  • Si N és un nombre parell, dividiu N per dos.
  • Si N és un nombre senar, multipliqueu N per 3 i sumeu 1.
  • Continueu generant nombres d'aquesta manera fins que N sigui igual a 1.

Matemàticament, podem definir el problema 3N+1 de la següent manera:

Problema 3N+1 a Java

Entenem l'enunciat del problema a través d'un exemple.

Suposem, N = 3 , que és un nombre senar. Segons la regla anterior, multipliqueu N per 3 i sumeu 1, obtenim N = 3*3+1 = 10. Per tant, N esdevé un nombre parell. Ara, divideix N per 2. Dona N = 10/2 = 5. Continua el procés fins que N sigui igual a 1. Per tant, la seqüència 3N+1 serà 3, 10, 5, 16, 8, 4, 2, 1 .

Algoritme del problema 3N+1

Per calcular el proper trimestre, el programa ha de realitzar diferents accions segons si N és fins i tot o estrany . Per al mateix, vam requerir una declaració if que decidirà que N és parell o senar.

L'únic problema que queda és comptar. Comptar vol dir que comencem amb zero, i cada vegada que tenim alguna cosa per comptar, sumem 1. Necessitem una variable (per exemple, comptar) per fer el recompte.

comptar diferent

Encara ens hem de preocupar pel primer pas. Com podem obtenir un nombre enter positiu de l'usuari? Si només llegim un número, és possible que l'usuari introdueixi un nombre negatiu o zero. Si seguim el que passa quan el valor de N és negatiu o zero, veurem que el programa continuarà per sempre, ja que el valor de N mai serà igual a 1 que no és compatible.

En aquest cas, probablement el problema no és gran, però en general hauríem d'intentar escriure programes que siguin infal·libles. Una manera d'arreglar-ho és seguir llegint en números fins que l'usuari escrigui un nombre positiu.

 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; 

El primer bucle while només finalitzarà quan N sigui un nombre positiu, com cal. Si N no és positiu, demaneu a l'usuari que introdueixi un altre valor. El problema sorgeix si el segon número introduït per l'usuari tampoc no és positiu. La instrucció if només s'executa una vegada, de manera que el segon número d'entrada no es prova mai.

java genera un nombre aleatori

Amb el bucle while, després d'introduir el segon número, l'ordinador torna al començament del bucle i prova si el segon número és positiu. En cas contrari, demana a l'usuari un tercer número i continuarà demanant números fins que l'usuari introdueixi una entrada acceptable.

Implementem l'algorisme anterior en un programa Java.

3n+1 Problema Programa Java

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