Der 3N+1-Problem ist ein abstraktes mathematisches Problem, das eine Vermutung ist (noch nicht bewiesen). Es ist auch bekannt als Collatz-Problem. In diesem Abschnitt werden wir das 3N+1-Problem zusammen mit seinem Java-Programm diskutieren.
Die Aufgabe besteht darin, ein Java-Programm zu schreiben, das eine positive Ganzzahl vom Benutzer liest und ausgibt 3N+1 Sequenz beginnend mit dieser Ganzzahl. Das Programm sollte auch die Anzahl der Begriffe in der Sequenz zählen und ausdrucken.
Finden der 3N+1-Sequenz
Definieren Sie bei einer positiven ganzen Zahl N die 3N+1-Sequenz beginnend bei N wie folgt:
- Wenn N eine gerade Zahl ist, teilen Sie N durch zwei.
- Wenn N eine ungerade Zahl ist, multiplizieren Sie N mit 3 und addieren Sie 1.
- Erzeugen Sie auf diese Weise weiterhin Zahlen, bis N gleich 1 wird.
Mathematisch können wir das 3N+1-Problem wie folgt definieren:
Zeichenfolge der Länge
Lassen Sie uns die Problemstellung anhand eines Beispiels verstehen.
Vermuten, N = 3 , was eine ungerade Zahl ist. Gemäß der obigen Regel multiplizieren wir N mit 3 und addieren 1, wir erhalten N = 3*3+1 = 10. Daher wird N zu einer geraden Zahl. Teilen Sie nun N durch 2. Es ergibt sich N = 10/2 = 5. Setzen Sie den Vorgang fort, bis N gleich 1 wird. Daher ergibt sich die Folge 3N+1 3, 10, 5, 16, 8, 4, 2, 1 .
3N+1-Problemalgorithmus
Um den nächsten Term zu berechnen, muss das Programm abhängig davon unterschiedliche Aktionen ausführen N Ist sogar oder seltsam . Aus diesem Grund benötigen wir eine if-Anweisung, die entscheidet, ob N gerade oder ungerade ist.
Das einzige Problem, das bleibt, ist das Zählen. Zählen bedeutet, dass wir bei Null beginnen und jedes Mal, wenn wir etwas zählen müssen, 1 hinzufügen. Wir benötigen eine Variable (z. B. Zählen), um das Zählen durchzuführen.
Wir müssen uns noch um den allerersten Schritt kümmern. Wie können wir vom Benutzer eine positive Ganzzahl erhalten? Wenn wir nur eine Zahl einlesen, ist es möglich, dass der Benutzer eine negative Zahl oder eine Null eingibt. Wenn wir verfolgen, was passiert, wenn der Wert von N negativ oder Null ist, werden wir sehen, dass das Programm ewig weiterläuft, da der Wert von N niemals gleich 1 wird, was nicht kompatibel ist.
In diesem Fall ist das Problem wahrscheinlich keine große Sache, aber im Allgemeinen sollten wir versuchen, narrensichere Programme zu schreiben. Eine Möglichkeit, dies zu beheben, besteht darin, so lange Zahlen einzulesen, bis der Benutzer eine positive Zahl eingibt.
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;
Die erste while-Schleife endet wie erforderlich nur, wenn N eine positive Zahl ist. Wenn N nicht positiv ist, bitten Sie den Benutzer, einen anderen Wert einzugeben. Das Problem entsteht, wenn die zweite vom Benutzer eingegebene Zahl ebenfalls nicht positiv ist. Die if-Anweisung wird nur einmal ausgeführt, sodass die zweite Eingabenummer nie getestet wird.
Bei der while-Schleife springt der Computer nach der Eingabe der zweiten Zahl zurück zum Anfang der Schleife und prüft, ob die zweite Zahl positiv ist. Wenn nicht, wird der Benutzer nach einer dritten Nummer gefragt und so lange nach Nummern gefragt, bis der Benutzer eine akzeptable Eingabe macht.
Lassen Sie uns den obigen Algorithmus in einem Java-Programm implementieren.
3n+1 Problem Java-Programm
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></=>