logo

3N+1-problem i Java

Det 3N+1 problem er et abstrakt matematisk problem, der er en formodning (endnu ikke bevist). Det er også kendt som Collatz problem. I dette afsnit vil vi diskutere 3N+1-problemet sammen med dets Java-program.

Opgaven er at skrive et Java-program, der læser et positivt heltal fra brugeren og udskriver 3N+1 sekvens startende fra dette heltal. Programmet skal også tælle og udskrive antallet af termer i rækkefølgen.

Find 3N+1-sekvensen

Givet et positivt heltal, N, definer 3N+1-sekvensen startende fra N som følger:

  • Hvis N er et lige tal, så divider N med to.
  • Hvis N er et ulige tal, skal du gange N med 3 og tilføje 1.
  • Fortsæt med at generere tal på denne måde, indtil N bliver lig med 1.

Matematisk kan vi definere 3N+1-problemet som følger:

3N+1-problem i Java

Lad os forstå problemformuleringen gennem et eksempel.

Formode, N = 3 , som er et ulige tal. Ifølge ovenstående regel, gange N med 3 og lægge 1 sammen, får vi N = 3*3+1 = 10. Derfor bliver N et lige tal. Divider nu N med 2. Det giver N = 10/2 = 5. Fortsæt processen, indtil N bliver lig med 1. Derfor vil 3N+1-sekvensen være 3, 10, 5, 16, 8, 4, 2, 1 .

3N+1 problemalgoritme

For at beregne den næste periode skal programmet tage forskellige handlinger afhængigt af om N er også selvom eller ulige . Til det samme krævede vi en hvis-udsagn, der afgør, at N er lige eller ulige.

Det eneste problem, der er tilbage, tæller. At tælle betyder, at vi starter med nul, og hver gang vi har noget at tælle, tilføjer vi 1. Vi skal bruge en variabel (f.eks. tælle) for at tælle.

Vi skal stadig bekymre os om det allerførste skridt. Hvordan kan vi få et positivt heltal fra brugeren? Hvis vi bare læser et tal ind, er det muligt, at brugeren skriver et negativt tal eller nul. Hvis vi følger, hvad der sker, når værdien af ​​N er negativ eller nul, vil vi se, at programmet vil fortsætte for evigt, da værdien af ​​N aldrig bliver lig med 1, hvilket ikke er kompatibelt.

I dette tilfælde er problemet nok ikke så stort, men generelt bør vi forsøge at skrive programmer, der er idiotsikre. En måde at løse dette på er at fortsætte med at læse i tal, indtil brugeren indtaster et positivt tal.

 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; 

Den første while-løkke slutter kun, når N er et positivt tal, efter behov. Hvis N ikke er positiv, skal du bede brugeren om at indtaste en anden værdi. Problemet opstår, hvis det andet tal, som brugeren indtaster, også er ikke-positivt. If-sætningen udføres kun én gang, så det andet inputnummer testes aldrig.

Med while-løkken, efter at det andet tal er indtastet, hopper computeren tilbage til begyndelsen af ​​loopet og tester, om det andet tal er positivt. Hvis ikke, beder den brugeren om et tredje nummer, og den vil fortsætte med at bede om numre, indtil brugeren indtaster et acceptabelt input.

Lad os implementere ovenstående algoritme i et Java-program.

3n+1 Problem Java-program

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