ال 3N+1 problem هي مشكلة رياضية مجردة وهي عبارة عن تخمين (لم يتم إثباته بعد). ومن المعروف أيضا باسم مشكلة كولاتز. في هذا القسم، سنناقش مشكلة 3N+1 مع برنامج Java الخاص بها.
تتمثل المهمة في كتابة برنامج Java الذي سيقرأ عددًا صحيحًا موجبًا من المستخدم وسيقوم بطباعة الملف 3N+1 تسلسل يبدأ من هذا العدد الصحيح. يجب على البرنامج أيضًا حساب وطباعة عدد المصطلحات في التسلسل.
int بارسينت
العثور على تسلسل 3N+1
بالنظر إلى عدد صحيح موجب، N، حدد تسلسل 3N+1 بدءًا من N كما يلي:
- إذا كان N عددا زوجيا، فقم بقسمة N على اثنين.
- إذا كان N عددا فرديا، فاضرب N في 3 وأضف 1.
- استمر في توليد الأرقام بهذه الطريقة حتى تصبح N مساوية لـ 1.
رياضياً يمكننا تحديد مسألة 3N+1 كما يلي:
دعونا نفهم بيان المشكلة من خلال مثال.
يفترض، ن = 3 ، وهو رقم فردي. وفقًا للقاعدة المذكورة أعلاه، اضرب N في 3 وأضف 1، نحصل على N = 3*3+1 = 10. وبالتالي، يصبح N عددًا زوجيًا. الآن، اقسم N على 2. يعطيك N = 10/2 = 5. استمر في العملية حتى تصبح N مساوية لـ 1. وبالتالي، سيكون التسلسل 3N+1 3، 10، 5، 16، 8، 4، 2، 1 .
جافافكس على الكسوف
3N+1 Problem Algorithm
من أجل حساب الحد التالي، يجب على البرنامج اتخاذ إجراءات مختلفة اعتمادا على ما إذا كان ن يكون حتى أو غريب . لنفس السبب، طلبنا عبارة if التي ستقرر أن N زوجية أو فردية.
المشكلة الوحيدة المتبقية هي العد. العد يعني أننا نبدأ بالصفر، وفي كل مرة يكون لدينا شيء نحسبه، نضيف 1. نحتاج إلى متغير (مثل العد) للقيام بالعد.
لا يزال يتعين علينا القلق بشأن الخطوة الأولى. كيف يمكننا الحصول على عدد صحيح موجب من المستخدم؟ إذا قرأنا رقمًا للتو، فمن الممكن أن يكتب المستخدم رقمًا سالبًا أو صفرًا. إذا تابعنا ما يحدث عندما تكون قيمة N سالبة أو صفراً، فسنرى أن البرنامج سيستمر إلى الأبد، لأن قيمة N لن تساوي أبداً 1 وهو أمر غير متوافق.
في هذه الحالة، ربما لا تكون المشكلة مشكلة كبيرة، ولكن بشكل عام يجب أن نحاول كتابة برامج مضمونة. إحدى طرق حل هذه المشكلة هي الاستمرار في قراءة الأرقام حتى يكتب المستخدم رقمًا موجبًا.
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;
ستنتهي حلقة while الأولى فقط عندما يكون N رقمًا موجبًا، كما هو مطلوب. إذا لم تكن N موجبة، فاطلب من المستخدم إدخال قيمة أخرى. تنشأ المشكلة إذا كان الرقم الثاني الذي أدخله المستخدم غير موجب أيضًا. يتم تنفيذ عبارة if مرة واحدة فقط، لذلك لا يتم اختبار رقم الإدخال الثاني أبدًا.
باستخدام الحلقة while، بعد إدخال الرقم الثاني، يعود الكمبيوتر إلى بداية الحلقة ويختبر ما إذا كان الرقم الثاني موجبًا. إذا لم يكن الأمر كذلك، فإنه يطلب من المستخدم رقمًا ثالثًا، وسيستمر في طلب الأرقام حتى يقوم المستخدم بإدخال إدخال مقبول.
مخطوطة لكل منهما
دعونا ننفذ الخوارزمية المذكورة أعلاه في برنامج جافا.
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('Enter the starting point for the sequence: '); //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></=>