De 3N+1 problem er et abstrakt matematisk problem som er en formodning (ennå ikke bevist). Det er også kjent som Collatz-problem. I denne delen vil vi diskutere 3N+1-problemet sammen med Java-programmet.
Oppgaven er å skrive et Java-program som vil lese et positivt heltall fra brukeren og skrive ut 3N+1 sekvens som starter fra det hele tallet. Programmet skal også telle og skrive ut antall termer i sekvensen.
Finne 3N+1-sekvensen
Gitt et positivt heltall, N, definer 3N+1-sekvensen som starter fra N som følger:
- Hvis N er et partall, del N på to.
- Hvis N er et oddetall, multipliser N med 3 og legg til 1.
- Fortsett å generere tall på denne måten til N blir lik 1.
Matematisk kan vi definere 3N+1-problemet som følger:
La oss forstå problemformuleringen gjennom et eksempel.
Anta, N = 3 , som er et oddetall. I følge regelen ovenfor, multipliser N med 3 og legg til 1, vi får N = 3*3+1 = 10. Derfor blir N et partall. Del nå N med 2. Det gir N = 10/2 = 5. Fortsett prosessen til N blir lik 1. Derfor vil 3N+1-sekvensen være 3, 10, 5, 16, 8, 4, 2, 1 .
3N+1 Problemalgoritme
For å beregne neste termin, må programmet ta forskjellige handlinger avhengig av om N er til og med eller merkelig . For det samme krevde vi en hvis-setning som avgjør at N er partall eller oddetall.
Det eneste problemet som gjenstår er å telle. Å telle betyr at vi starter med null, og hver gang vi har noe å telle legger vi til 1. Vi trenger en variabel (for eksempel telling) for å gjøre tellingen.
Vi må fortsatt bekymre oss for det aller første steget. Hvordan kan vi få et positivt heltall fra brukeren? Hvis vi bare leser inn et tall, er det mulig at brukeren kan skrive inn et negativt tall eller null. Hvis vi følger hva som skjer når verdien av N er negativ eller null, vil vi se at programmet vil fortsette for alltid, siden verdien av N aldri vil bli lik 1 som ikke er kompatibelt.
I dette tilfellet er nok problemet ingen stor sak, men generelt sett bør vi prøve å skrive programmer som er idiotsikker. En måte å fikse dette på er å fortsette å lese i tall til brukeren skriver inn et positivt tall.
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økken avsluttes bare når N er et positivt tall, etter behov. Hvis N ikke er positiv, be brukeren om å legge inn en annen verdi. Problemet oppstår hvis det andre tallet som legges inn av brukeren også er ikke-positivt. If-setningen utføres bare én gang, så det andre inndatanummeret blir aldri testet.
Med while-løkken, etter at det andre tallet er lagt inn, hopper datamaskinen tilbake til begynnelsen av løkken og tester om det andre tallet er positivt. Hvis ikke, ber den brukeren om et tredje nummer, og den vil fortsette å spørre om tall til brukeren skriver inn en akseptabel inndata.
La oss implementere algoritmen ovenfor 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('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></=>