logo

3N+1 probléma Java-ban

A 3N+1 probléma egy absztrakt matematikai probléma, amely sejtés (még nem bizonyított). Úgy is ismert, mint Collatz probléma. Ebben a részben a 3N+1 problémát tárgyaljuk a Java programmal együtt.

A feladat az, hogy írjunk egy Java programot, amely beolvas egy pozitív egész számot a felhasználóból, és kiírja a 3N+1 abból az egész számból kiinduló sorozat. A programnak meg kell számolnia és ki kell nyomtatnia a kifejezések számát a sorozatban.

A 3N+1 szekvencia megtalálása

Adott egy pozitív egész szám, N, határozza meg a 3N+1 sorozatot N-ből kiindulva a következőképpen:

szöveg méretű latex
  • Ha N páros szám, akkor oszd el N-t kettővel.
  • Ha N páratlan szám, akkor szorozzuk meg N-t 3-mal, és adjunk hozzá 1-et.
  • Folytassa a számok generálását ilyen módon, amíg N nem lesz egyenlő 1-gyel.

Matematikailag a 3N+1 problémát a következőképpen definiálhatjuk:

3N+1 probléma Java-ban

Értsük meg a problémafelvetést egy példán keresztül.

Tegyük fel, N = 3 , ami páratlan szám. A fenti szabály szerint N-t megszorozva 3-mal, és összeadva 1-et, N = 3*3+1 = 10-et kapunk. Így N páros szám lesz. Most oszd el N-t 2-vel. Így N = 10/2 = 5. Folytassa a folyamatot, amíg N egyenlő nem lesz 1-gyel. Így a 3N+1 sorozat lesz 3, 10, 5, 16, 8, 4, 2, 1 .

3N+1 probléma algoritmus

A következő kifejezés kiszámításához a programnak különböző műveleteket kell végrehajtania attól függően, hogy N van még vagy páratlan . Ehhez szükségünk volt egy if utasításra, amely eldönti, hogy N páros vagy páratlan.

Az egyetlen probléma, ami megmarad, a számolás. A számlálás azt jelenti, hogy nullával kezdjük, és minden alkalommal, amikor számolni kell, hozzáadunk 1-et. A számoláshoz szükségünk van egy változóra (mondjuk a számolásra).

Még mindig aggódnunk kell a legelső lépéstől. Hogyan kaphatunk pozitív egész számot a felhasználótól? Ha csak egy számot olvasunk be, előfordulhat, hogy a felhasználó negatív számot vagy nullát ír be. Ha követjük, mi történik, ha N értéke negatív vagy nulla, akkor látni fogjuk, hogy a program örökké folytatódik, mivel N értéke soha nem lesz egyenlő 1-gyel, ami nem kompatibilis.

Ebben az esetben valószínűleg nem nagy baj, de általában igyekezzünk bolondbiztos programokat írni. Ennek egyik módja a számok olvasása, amíg a felhasználó pozitív számot ír be.

 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; 

Az első while ciklus csak akkor ér véget, ha N pozitív szám, szükség szerint. Ha N nem pozitív, kérje meg a felhasználót, hogy adjon meg egy másik értéket. A probléma akkor jelentkezik, ha a felhasználó által beírt második szám szintén nem pozitív. Az if utasítást csak egyszer hajtják végre, így a második bemeneti szám soha nem kerül tesztelésre.

A while ciklussal a második szám bevitele után a számítógép visszaugrik a ciklus elejére, és megvizsgálja, hogy a második szám pozitív-e. Ha nem, akkor egy harmadik számot kér a felhasználótól, és addig folytatja a számok kérését, amíg a felhasználó nem ír be egy elfogadható bevitelt.

Valósítsuk meg a fenti algoritmust egy Java programban.

3n+1 Probléma 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></=>