The Problema 3N+1 este o problemă matematică abstractă care este o presupunere (nedemonstrată încă). Este cunoscut și ca Problema Collatz. În această secțiune, vom discuta problema 3N+1 împreună cu programul său Java.
Sarcina este de a scrie un program Java care va citi un întreg pozitiv de la utilizator și va tipări 3N+1 succesiune pornind de la acel număr întreg. De asemenea, programul ar trebui să numere și să imprime numărul de termeni din secvență.
Găsirea secvenței 3N+1
Având în vedere un număr întreg pozitiv, N, definiți secvența 3N+1 începând de la N după cum urmează:
- Dacă N este un număr par, atunci împărțiți N la doi.
- Dacă N este un număr impar, atunci înmulțiți N cu 3 și adăugați 1.
- Continuați să generați numere în acest fel până când N devine egal cu 1.
Din punct de vedere matematic, putem defini problema 3N+1 după cum urmează:
Să înțelegem enunțul problemei printr-un exemplu.
Presupune, N = 3 , care este un număr impar. Conform regulii de mai sus, înmulțim N cu 3 și adunăm 1, obținem N = 3*3+1 = 10. Prin urmare, N devine un număr par. Acum, împărțiți N la 2. Se obține N = 10/2 = 5. Continuați procesul până când N devine egal cu 1. Prin urmare, secvența 3N+1 va fi 3, 10, 5, 16, 8, 4, 2, 1 .
Algoritmul problemei 3N+1
Pentru a calcula următorul termen, programul trebuie să întreprindă acțiuni diferite, în funcție de situația N este chiar sau ciudat . Pentru același lucru, am cerut o declarație if care va decide că N este par sau impar.
Singura problemă care rămâne este numărarea. Numărarea înseamnă că începem cu zero și de fiecare dată când avem ceva de numărat, adăugăm 1. Avem nevoie de o variabilă (să zicem numărare) pentru a face numărătoarea.
Încă trebuie să ne facem griji pentru primul pas. Cum putem obține un număr întreg pozitiv de la utilizator? Dacă citim doar un număr, este posibil ca utilizatorul să introducă un număr negativ sau zero. Dacă urmărim ce se întâmplă când valoarea lui N este negativă sau zero, vom vedea că programul va continua pentru totdeauna, deoarece valoarea lui N nu va deveni niciodată egală cu 1 care nu este compatibil.
În acest caz, probabil că problema nu este mare lucru, dar, în general, ar trebui să încercăm să scriem programe care să fie sigure. O modalitate de a remedia acest lucru este să continuați să citiți în numere până când utilizatorul introduce un număr pozitiv.
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;
Prima buclă while se va încheia numai când N este un număr pozitiv, după cum este necesar. Dacă N nu este pozitiv, cereți utilizatorului să introducă o altă valoare. Problema apare dacă al doilea număr introdus de utilizator este, de asemenea, nepozitiv. Instrucțiunea if este executată o singură dată, astfel încât al doilea număr de intrare nu este niciodată testat.
Cu bucla while, după ce al doilea număr este introdus, computerul sare înapoi la începutul buclei și testează dacă al doilea număr este pozitiv. Dacă nu, acesta solicită utilizatorului un al treilea număr și va continua să solicite numere până când utilizatorul introduce o intrare acceptabilă.
Să implementăm algoritmul de mai sus într-un program Java.
3n+1 Problemă Programul 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('Enter the starting point for the sequence: '); //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></=>