logo

3N+1 ongelma Javassa

The 3N+1 ongelma on abstrakti matemaattinen ongelma, joka on olettamus (ei vielä todistettu). Se tunnetaan myös nimellä Collatzin ongelma. Tässä osiossa käsittelemme 3N+1-ongelmaa ja sen Java-ohjelmaa.

java listnode

Tehtävänä on kirjoittaa Java-ohjelma, joka lukee käyttäjältä positiivisen kokonaisluvun ja tulostaa sen 3N+1 sarja alkaa tästä kokonaisluvusta. Ohjelman tulee myös laskea ja tulostaa sekvenssin termien määrä.

3N+1-sekvenssin löytäminen

Kun annetaan positiivinen kokonaisluku N, määritä 3N+1-sekvenssi alkaen N:stä seuraavasti:

  • Jos N on parillinen luku, jaa N kahdella.
  • Jos N on pariton luku, kerro N kolmella ja lisää 1.
  • Jatka lukujen luomista tällä tavalla, kunnes N on yhtä suuri kuin 1.

Matemaattisesti voimme määritellä 3N+1-ongelman seuraavasti:

3N+1 ongelma Javassa

Ymmärretään ongelman kuvaus esimerkin kautta.

Olettaa, N = 3 , joka on pariton luku. Yllä olevan säännön mukaan kerro N 3:lla ja lisää 1, jolloin saadaan N = 3*3+1 = 10. Näin ollen N:stä tulee parillinen luku. Jaa nyt N kahdella. Saat N = 10/2 = 5. Jatka prosessia, kunnes N on yhtä suuri kuin 1. Näin ollen sekvenssi 3N+1 on 3, 10, 5, 16, 8, 4, 2, 1 .

3N+1 ongelmaalgoritmi

Seuraavan lukukauden laskemiseksi ohjelman on suoritettava erilaisia ​​toimia riippuen siitä, onko N On jopa tai outo . Samaa varten tarvitsimme if-lauseen, joka päättää, että N on parillinen tai pariton.

Yksi jäljellä oleva ongelma on laskeminen. Laskeminen tarkoittaa, että aloitamme nollasta, ja aina kun meillä on jotain laskettavaa, lisäämme 1. Tarvitsemme muuttujan (esim. laskenta) laskentaan.

sharwanand

Meidän on edelleen huolehdittava ensimmäisestä askeleesta. Miten saamme käyttäjältä positiivisen kokonaisluvun? Jos luemme vain luvun, on mahdollista, että käyttäjä voi kirjoittaa negatiivisen luvun tai nollan. Jos seuraamme mitä tapahtuu, kun N:n arvo on negatiivinen tai nolla, näemme, että ohjelma jatkuu ikuisesti, koska N:n arvo ei koskaan tule yhtä suureksi kuin 1, mikä ei ole yhteensopiva.

Tässä tapauksessa ongelma ei luultavasti ole iso juttu, mutta yleensä meidän pitäisi yrittää kirjoittaa idioottivarmoja ohjelmia. Yksi tapa korjata tämä on jatkaa lukujen lukemista, kunnes käyttäjä kirjoittaa positiivisen luvun.

 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; 

Ensimmäinen while-silmukka päättyy vain, kun N on tarpeen mukaan positiivinen luku. Jos N ei ole positiivinen, pyydä käyttäjää syöttämään toinen arvo. Ongelma syntyy, jos myös käyttäjän antama toinen numero ei ole positiivinen. If-lause suoritetaan vain kerran, joten toista syötenumeroa ei koskaan testata.

java vertailumenetelmä

Kun toinen numero on syötetty, tietokone siirtyy while-silmukalla takaisin silmukan alkuun ja testaa, onko toinen luku positiivinen. Jos ei, se pyytää käyttäjältä kolmatta numeroa ja jatkaa numeroiden pyytämistä, kunnes käyttäjä syöttää hyväksyttävän syötteen.

Toteutetaan yllä oleva algoritmi Java-ohjelmassa.

3n+1 Ongelma Java-ohjelma

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