logo

3N+1-probleem op Java

De 3N+1-probleem is een abstract wiskundig probleem dat een vermoeden is (nog niet bewezen). Het is ook bekend als Collatz-probleem. In deze sectie bespreken we het 3N+1-probleem samen met het Java-programma.

De taak is om een ​​Java-programma te schrijven dat een positief geheel getal van de gebruiker leest en het 3N+1 reeks die begint vanaf dat gehele getal. Het programma moet ook het aantal termen in de reeks tellen en afdrukken.

Het vinden van de 3N+1-reeks

Gegeven een positief geheel getal N, definieer de 3N+1-reeks beginnend bij N als volgt:

  • Als N een even getal is, deel N dan door twee.
  • Als N een oneven getal is, vermenigvuldig dan N met 3 en tel er 1 bij op.
  • Ga door met het genereren van getallen op deze manier totdat N gelijk wordt aan 1.

Wiskundig gezien kunnen we het 3N+1-probleem als volgt definiëren:

3N+1-probleem op Java

Laten we de probleemstelling begrijpen aan de hand van een voorbeeld.

Veronderstellen, N = 3 , wat een oneven getal is. Volgens de bovenstaande regel, vermenigvuldig N met 3 en voeg 1 toe, we krijgen N = 3*3+1 = 10. Daarom wordt N een even getal. Deel nu N door 2. Dit geeft N = 10/2 = 5. Ga door met het proces totdat N gelijk wordt aan 1. De reeks 3N+1 zal dus zijn 3, 10, 5, 16, 8, 4, 2, 1 .

3N+1 Probleemalgoritme

Om de volgende term te berekenen, moet het programma verschillende acties ondernemen, afhankelijk van of N is zelfs of vreemd . Om hetzelfde te bereiken, hadden we een if-instructie nodig die bepaalt of N even of oneven is.

smtp-internetprotocol

Het enige probleem dat overblijft is het tellen. Tellen betekent dat we beginnen met nul, en elke keer dat we iets moeten tellen, tellen we er 1 bij op. We hebben een variabele nodig (bijvoorbeeld tellen) om te tellen.

css commentaar

Over de allereerste stap moeten we ons nog zorgen maken. Hoe kunnen we een positief geheel getal van de gebruiker krijgen? Als we alleen maar een getal inlezen, is het mogelijk dat de gebruiker een negatief getal of nul typt. Als we volgen wat er gebeurt als de waarde van N negatief of nul is, zullen we zien dat het programma eeuwig doorgaat, aangezien de waarde van N nooit gelijk zal worden aan 1, wat niet compatibel is.

In dit geval is het probleem waarschijnlijk niet zo erg, maar over het algemeen moeten we proberen programma's te schrijven die onfeilbaar zijn. Een manier om dit op te lossen is door getallen in te lezen totdat de gebruiker een positief getal typt.

 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; 

De eerste while-lus eindigt alleen als N een positief getal is, zoals vereist. Als N niet positief is, vraag de gebruiker dan om een ​​andere waarde in te voeren. Het probleem doet zich voor als het tweede door de gebruiker ingevoerde nummer ook niet-positief is. De if-instructie wordt slechts één keer uitgevoerd, dus het tweede invoernummer wordt nooit getest.

Bij de while-lus springt de computer, nadat het tweede getal is ingevoerd, terug naar het begin van de lus en test of het tweede getal positief is. Als dit niet het geval is, wordt de gebruiker om een ​​derde nummer gevraagd en blijft het om nummers vragen totdat de gebruiker een acceptabele invoer invoert.

Laten we het bovenstaande algoritme in een Java-programma implementeren.

3n+1 Probleem Java-programma

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