logo

Problém 3N+1 v Javě

The Problém 3N+1 je abstraktní matematický problém, který je domněnkou (dosud neprokázanou). Je také známý jako Collatzův problém. V této části probereme problém 3N+1 spolu s jeho programem Java.

Úkolem je napsat Java program, který přečte kladné celé číslo od uživatele a vytiskne jej 3N+1 sekvence začínající od tohoto celého čísla. Program by měl také spočítat a vytisknout počet termínů v sekvenci.

10 z 50,00

Nalezení sekvence 3N+1

Vzhledem k kladnému celému číslu N definujte sekvenci 3N+1 začínající od N takto:

  • Pokud je N sudé číslo, vydělte N dvěma.
  • Pokud je N liché číslo, vynásobte N třemi a přidejte 1.
  • Pokračujte ve generování čísel tímto způsobem, dokud se N nestane rovno 1.

Matematicky můžeme problém 3N+1 definovat takto:

Problém 3N+1 v Javě

Pojďme pochopit problémové prohlášení na příkladu.

Předpokládat, N = 3 , což je liché číslo. Podle výše uvedeného pravidla vynásobíme N 3 a sečteme 1, dostaneme N = 3*3+1 = 10. N se tedy stane sudým číslem. Nyní vydělte N 2. Získáme N = 10/2 = 5. Pokračujte v procesu, dokud se N nebude rovnat 1. Posloupnost 3N+1 bude tedy 3, 10, 5, 16, 8, 4, 2, 1 .

Algoritmus problému 3N+1

Aby bylo možné vypočítat další člen, musí program provést různé akce v závislosti na tom, zda N je dokonce nebo zvláštní . Pro totéž jsme požadovali příkaz if, který rozhodne, že N je sudé nebo liché.

Jediný problém, který zůstává, je počítání. Počítání znamená, že začínáme od nuly a pokaždé, když máme co počítat, přidáme 1. K počítání potřebujeme proměnnou (řekněme počítání).

Musíme se ještě starat o úplně první krok. Jak můžeme od uživatele získat kladné celé číslo? Pokud pouze načteme číslo, je možné, že uživatel zadá záporné číslo nebo nulu. Pokud budeme sledovat, co se stane, když je hodnota N záporná nebo nulová, uvidíme, že program bude pokračovat navždy, protože hodnota N se nikdy nebude rovnat 1, což není kompatibilní.

V tomto případě problém pravděpodobně není žádný velký problém, ale obecně bychom se měli snažit psát programy, které jsou spolehlivé. Jedním ze způsobů, jak to vyřešit, je pokračovat ve čtení čísel, dokud uživatel nezadá kladné číslo.

 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; 

První smyčka while skončí pouze tehdy, když N je kladné číslo, podle potřeby. Pokud N není kladné, požádejte uživatele o zadání jiné hodnoty. Problém nastává, pokud je druhé číslo zadané uživatelem také nekladné. Příkaz if se provede pouze jednou, takže druhé vstupní číslo není nikdy testováno.

V cyklu while po zadání druhého čísla počítač přeskočí zpět na začátek cyklu a otestuje, zda je druhé číslo kladné. Pokud ne, požádá uživatele o třetí číslo a bude pokračovat v dotazování na čísla, dokud uživatel nezadá přijatelný vstup.

režisér Karan Johar

Pojďme implementovat výše uvedený algoritmus v programu Java.

Problémový program Java 3n+1

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