logo

Težava 3N+1 v Javi

The 3N+1 problem je abstrakten matematični problem, ki je domneva (še ni dokazana). Znan je tudi kot Collatz problem. V tem razdelku bomo obravnavali problem 3N+1 skupaj z njegovim programom Java.

Naloga je napisati program Java, ki bo od uporabnika prebral pozitivno celo število in ga natisnil 3N+1 zaporedje, ki se začne od tega celega števila. Program naj tudi prešteje in izpiše število izrazov v zaporedju.

Iskanje zaporedja 3N+1

Glede na pozitivno celo število, N, definirajte zaporedje 3N+1, ki se začne z N, kot sledi:

ime posebnih znakov
  • Če je N sodo število, potem N delite z dve.
  • Če je N liho število, pomnožite N s 3 in dodajte 1.
  • Nadaljujte z ustvarjanjem števil na ta način, dokler N ne postane enako 1.

Matematično lahko problem 3N+1 definiramo na naslednji način:

Težava 3N+1 v Javi

Razumejmo izjavo problema na primeru.

Recimo, N = 3 , kar je liho število. V skladu z zgornjim pravilom pomnožimo N s 3 in dodamo 1, dobimo N = 3*3+1 = 10. Zato N postane sodo število. Zdaj delite N z 2. To daje N = 10/2 = 5. Nadaljujte s postopkom, dokler N ne postane enako 1. Zato bo zaporedje 3N+1 3, 10, 5, 16, 8, 4, 2, 1 .

3N+1 problemski algoritem

Za izračun naslednjega izraza mora program izvesti različna dejanja, odvisno od tega, ali n je celo oz Čuden . Za isto smo potrebovali stavek if, ki bo odločil, ali je N sodo ali liho.

Edina težava, ki ostaja, je štetje. Štetje pomeni, da začnemo z ničlo in vsakič, ko imamo nekaj za štetje, dodamo 1. Za štetje potrebujemo spremenljivko (recimo štetje).

vstavljanje python

Še vedno nas mora skrbeti prvi korak. Kako lahko od uporabnika dobimo pozitivno celo število? Če samo preberemo število, je možno, da bo uporabnik vnesel negativno število ali nič. Če sledimo, kaj se zgodi, ko je vrednost N negativna ali nič, bomo videli, da bo program trajal večno, saj vrednost N nikoli ne bo enaka 1, kar ni združljivo.

alfa-beta obrezovanje

V tem primeru težava verjetno ni velika težava, a na splošno bi morali poskušati pisati programe, ki so odporni na napake. Eden od načinov, kako to popraviti, je, da nadaljujete z branjem v številkah, dokler uporabnik ne vnese pozitivnega števila.

 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 zanka while se bo končala šele, ko je N pozitivno število, kot je zahtevano. Če N ni pozitiven, prosite uporabnika, da vnese drugo vrednost. Težava nastane, če tudi druga številka, ki jo vnese uporabnik, ni pozitivna. Stavek if se izvede samo enkrat, zato se druga vhodna številka nikoli ne testira.

Pri zanki while računalnik po vnosu druge številke skoči nazaj na začetek zanke in preizkusi, ali je druga številka pozitivna. Če ne, uporabnika vpraša za tretjo številko in bo še naprej zahteval številke, dokler uporabnik ne vnese sprejemljivega vnosa.

Implementirajmo zgornji algoritem v program 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></=>