logo

3N+1 problēma Java

The 3N+1 problēma ir abstrakta matemātiska problēma, kas ir minējums (vēl nav pierādīts). Tas ir pazīstams arī kā Collatz problēma. Šajā sadaļā mēs apspriedīsim 3N+1 problēmu kopā ar tās Java programmu.

Uzdevums ir uzrakstīt Java programmu, kas nolasīs no lietotāja pozitīvu veselu skaitli un izdrukās 3N+1 secība, sākot no šī veselā skaitļa. Programmai vajadzētu arī saskaitīt un izdrukāt terminu skaitu secībā.

3N+1 secības atrašana

Ja ir pozitīvs vesels skaitlis N, definējiet secību 3N+1, sākot no N šādi:

  • Ja N ir pāra skaitlis, tad N dala ar divi.
  • Ja N ir nepāra skaitlis, reiziniet N ar 3 un pievienojiet 1.
  • Turpiniet ģenerēt skaitļus šādā veidā, līdz N kļūst vienāds ar 1.

Matemātiski 3N+1 problēmu varam definēt šādi:

listnode
3N+1 problēma Java

Sapratīsim problēmas izklāstu, izmantojot piemēru.

Pieņemsim, N = 3 , kas ir nepāra skaitlis. Saskaņā ar augstāk minēto noteikumu, reizinot N ar 3 un saskaitot 1, iegūstam N = 3*3+1 = 10. Tāpēc N kļūst par pāra skaitli. Tagad sadaliet N ar 2. Tas dod N = 10/2 = 5. Turpiniet procesu, līdz N kļūst vienāds ar 1. Tādējādi secība 3N+1 būs 3, 10, 5, 16, 8, 4, 2, 1 .

np polsterējums

3N+1 problēmas algoritms

Lai aprēķinātu nākamo termiņu, programmai jāveic dažādas darbības atkarībā no tā, vai N ir pat vai nepāra . Šim pašam mums bija nepieciešams if paziņojums, kas noteiks, ka N ir pāra vai nepāra.

Vienīgā problēma, kas paliek, ir skaitīšana. Skaitīšana nozīmē, ka mēs sākam ar nulli, un katru reizi, kad mums ir kaut kas jāskaita, mēs pievienojam 1. Mums ir nepieciešams mainīgais (teiksim, skaitīšana), lai veiktu skaitīšanu.

Mums joprojām ir jāuztraucas par pašu pirmo soli. Kā mēs varam iegūt pozitīvu veselu skaitli no lietotāja? Ja mēs vienkārši nolasām skaitli, iespējams, ka lietotājs var ievadīt negatīvu skaitli vai nulli. Ja mēs sekosim tam, kas notiek, kad N vērtība ir negatīva vai nulle, mēs redzēsim, ka programma turpināsies mūžīgi, jo N vērtība nekad nekļūs vienāda ar 1, kas nav saderīga.

Šajā gadījumā problēma, iespējams, nav liela, taču kopumā mums vajadzētu mēģināt rakstīt programmas, kas ir drošas. Viens veids, kā to novērst, ir turpināt lasīt skaitļus, līdz lietotājs ievada pozitīvu skaitli.

.net apmācība
 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; 

Pirmā while cilpa beigsies tikai tad, ja N ir pozitīvs skaitlis, kā nepieciešams. Ja N nav pozitīvs, lūdziet lietotājam ievadīt citu vērtību. Problēma rodas, ja arī otrais lietotāja ievadītais cipars nav pozitīvs. If paziņojums tiek izpildīts tikai vienu reizi, tāpēc otrais ievades numurs nekad netiek pārbaudīts.

Ar while cilpu pēc otrā skaitļa ievadīšanas dators pāriet atpakaļ uz cilpas sākumu un pārbauda, ​​vai otrais skaitlis ir pozitīvs. Ja nē, tas pieprasa lietotājam trešo numuru, un tas turpinās pieprasīt numurus, līdz lietotājs ievadīs pieņemamu ievadi.

Ieviesīsim iepriekš minēto algoritmu Java programmā.

3n+1 problēma Java programma

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