logo

3N+1-problem i Java

De 3N+1 problem är ett abstrakt matematiskt problem som är en gissning (ännu inte bevisad). Det är också känt som Collatz problem. I det här avsnittet kommer vi att diskutera 3N+1-problemet tillsammans med dess Java-program.

Uppgiften är att skriva ett Java-program som läser ett positivt heltal från användaren och skriver ut 3N+1 sekvens som börjar från det heltal. Programmet ska också räkna och skriva ut antalet termer i sekvensen.

Hitta 3N+1-sekvensen

Givet ett positivt heltal, N, definiera 3N+1-sekvensen med start från N enligt följande:

  • Om N är ett jämnt tal, dividera N med två.
  • Om N är ett udda tal, multiplicera N med 3 och addera 1.
  • Fortsätt att generera siffror på detta sätt tills N blir lika med 1.

Matematiskt kan vi definiera 3N+1-problemet enligt följande:

3N+1-problem i Java

Låt oss förstå problemformuleringen genom ett exempel.

Anta, N = 3 , vilket är ett udda tal. Enligt ovanstående regel, multiplicera N med 3 och addera 1, vi får N = 3*3+1 = 10. Därför blir N ett jämnt tal. Dela nu N med 2. Det ger N = 10/2 = 5. Fortsätt processen tills N blir lika med 1. Därför blir 3N+1-sekvensen 3, 10, 5, 16, 8, 4, 2, 1 .

window.open javascript

3N+1 Problemalgoritm

För att beräkna nästa termin måste programmet vidta olika åtgärder beroende på om N är även eller udda . För detsamma krävde vi ett if-uttalande som avgör att N är jämnt eller udda.

Det enda problemet som återstår är att räkna. Att räkna innebär att vi börjar med noll, och varje gång vi har något att räkna lägger vi till 1. Vi behöver en variabel (säg att räkna) för att kunna räkna.

Vi måste fortfarande oroa oss för det allra första steget. Hur kan vi få ett positivt heltal från användaren? Om vi ​​bara läser in ett tal, är det möjligt att användaren skriver in ett negativt tal eller noll. Om vi ​​följer vad som händer när värdet på N är negativt eller noll, kommer vi att se att programmet kommer att fortsätta för evigt, eftersom värdet på N aldrig blir lika med 1 vilket inte är kompatibelt.

I det här fallet är problemet förmodligen ingen stor sak, men generellt sett bör vi försöka skriva program som är idiotsäkra. Ett sätt att fixa detta är att fortsätta läsa i siffror tills användaren skriver in ett 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örsta while-slingan slutar endast när N är ett positivt tal, enligt behov. Om N inte är positivt, be användaren att mata in ett annat värde. Problemet uppstår om det andra numret som användaren matat in också är icke-positivt. If-satsen exekveras bara en gång, så det andra inmatningsnumret testas aldrig.

Med while-loopen, efter att den andra siffran har matats in, hoppar datorn tillbaka till början av loopen och testar om den andra siffran är positiv. Om inte, frågar den användaren om ett tredje nummer, och den fortsätter att fråga efter nummer tills användaren anger en acceptabel inmatning.

Låt oss implementera ovanstående algoritm i ett Java-program.

formatera ett datum i java

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