logo

Problem 3N+1 u Javi

The 3N+1 problem je apstraktni matematički problem koji je pretpostavka (još nije dokazana). Također je poznat kao Collatz problem. U ovom odjeljku raspravljat ćemo o problemu 3N+1 zajedno s njegovim Java programom.

Zadatak je napisati Java program koji će pročitati pozitivan cijeli broj od korisnika i ispisati ga 3N+1 niz koji počinje od tog cijelog broja. Program također treba prebrojati i ispisati broj pojmova u nizu.

preuzimanje videa s youtube vlc

Pronalaženje niza 3N+1

Za dan pozitivan cijeli broj, N, definirajte niz 3N+1 počevši od N na sljedeći način:

  • Ako je N paran broj, podijelite N s dva.
  • Ako je N neparan broj, pomnožite N s 3 i dodajte 1.
  • Nastavite generirati brojeve na ovaj način dok N ne postane jednak 1.

Matematički, problem 3N+1 možemo definirati na sljedeći način:

3N+1 problem u Javi

Shvatimo izjavu problema kroz primjer.

Pretpostavimo, N = 3 , što je neparan broj. Prema gornjem pravilu, pomnožite N s 3 i dodajte 1, dobit ćemo N = 3*3+1 = 10. Stoga N postaje paran broj. Sada podijelite N s 2. To daje N = 10/2 = 5. Nastavite proces dok N ne postane jednako 1. Dakle, niz 3N+1 bit će 3, 10, 5, 16, 8, 4, 2, 1 .

java enume

Algoritam problema 3N+1

Kako bi izračunao sljedeći izraz, program mora poduzeti različite radnje ovisno o tome hoće li N je čak ili neparan . Za isto, zahtijevali smo if naredbu koja će odlučiti je li N paran ili neparan.

Jedini problem koji ostaje je brojanje. Brojanje znači da počinjemo s nulom, a svaki put kada imamo nešto za brojati, dodamo 1. Potrebna nam je varijabla (recimo brojanje) da bismo izvršili brojanje.

Još uvijek moramo brinuti o prvom koraku. Kako možemo dobiti pozitivan cijeli broj od korisnika? Ako samo učitamo broj, moguće je da korisnik upiše negativan broj ili nulu. Ako pratimo što se događa kada je vrijednost N negativna ili nula, vidjet ćemo da će program trajati zauvijek, budući da vrijednost N nikada neće postati jednaka 1 što nije kompatibilno.

U ovom slučaju, problem vjerojatno nije velika stvar, ali općenito bismo trebali pokušati napisati programe koji su sigurni. Jedan od načina da se to riješi je da se nastavi čitati u brojevima dok korisnik ne upiše pozitivan broj.

 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; 

Prva while petlja će završiti samo kada je N pozitivan broj, kao što je potrebno. Ako N nije pozitivan, zamolite korisnika da unese drugu vrijednost. Problem nastaje ako je i drugi broj koji korisnik unese nepozitivan. Naredba if se izvršava samo jednom, tako da se drugi ulazni broj nikada ne testira.

S while petljom, nakon što se unese drugi broj, računalo se vraća na početak petlje i testira je li drugi broj pozitivan. Ako nije, traži od korisnika treći broj i nastavit će tražiti brojeve dok korisnik ne unese prihvatljiv unos.

sortiranje spajanjem

Implementirajmo gornji algoritam u 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></=>