متطلبات السؤال هي:
Callatz Conjecture:
لأي رقم طبيعي n ، إذا كان رقمًا متساويًا ، فقم بقصه نصف ؛ إذا كان رقمًا غريبًا ، فقم بقطع (3n+1) خارج النصف. إذا استمرت في قطع هذا الأمر مرارًا وتكرارًا ، فستحصل بالتأكيد على n = 1 في خطوة معينة. عندما نتحقق من تخمين Karaz ، من أجل تجنب الحسابات المتكررة ، يمكننا تسجيل كل رقم مواجهته أثناء عملية التكرار. على سبيل المثال ، عند التحقق من n = 3 ، نحتاج إلى حساب 3 و 5 و 8 و 4 و 2 و 1. عندما نتحقق من n = 5 و 8 و 2 ، يمكننا تحديد صحة Karaz بشكل مباشر دون إجراء حسابات متكررة ، لأن هذه الأرقام الأربعة قد تمت مواجهتها عند التحقق من 3 ، ونقول 5 و 8 و 4 و 2. اكتبها فوق أرقام أخرى في التسلسل.
الآن بالنظر إلى سلسلة من الأرقام التي سيتم التحقق منها ، نحتاج فقط إلى التحقق من عدد قليل من الأرقام الرئيسية ، لذلك لا يتعين علينا التحقق من الأرقام المتبقية مرارًا وتكرارًا. مهمتك هي اكتشاف هذه الأرقام الرئيسية وإخراجها من أجل كبير إلى صغير.
تنسيق الإدخال: يحتوي كل إدخال اختبار على حالة اختبار واحدة. يعطي السطر 1 عددًا صحيحًا إيجابيًا K (<100) ، يعطي السطر 2 قيم K من k عدد صحيح موجب مختلف N (1 <n <= 100) ليتم التحقق منه ، مفصولة بالمسافات.
تنسيق الإخراج: يأخذ إخراج كل حالة اختبار صفًا واحدًا ، ويتم إخراج أرقام المفاتيح بالترتيب من كبير إلى صغير. يتم فصل الأرقام بمساحة واحدة ، ولكن لا توجد مسافات بعد الرقم الأخير في سطر.
أدخل عينة:
6
3 5 6 7 8 11
عينة الإخراج:
7 6
الرمز كما يلي:
<span style = "font-size: 14px ؛"> import java.util.arraydequ ؛ استيراد java.util.arraylist ؛ استيراد java.util.dequ ؛ استيراد java.util.list ؛ استيراد java.util.queue ؛ استيراد java.util.scanner ؛ استيراد java.util.sortedset ؛ استيراد java.util.treeset ؛ الفئة العامة pat1005 {public static void main (string [] args) {// todo method method method scanner = new scanner (system.in) ؛ int numSize = scanner.nextint () ؛ arraydeque <integer> newArrayDeque = new ArrayDeque <integer> () ؛ arraydeque <integer> elverTearRayDeque = new arraydeque <integer> () ؛ int أنا ؛ بينما (scanner.hasnext ()) {// اقرأ قيمة إدخال لوحة المفاتيح لـ (i = 0 ؛ i <numSize ؛ i ++) {newArrayDequ.add (scanner.nextint ()) ؛ } if (i> = numSize) {break ؛ }} int temp ؛ لـ (عدد صحيح عدد صحيح: newarraydequ) {// حفظ الأرقام غير الحرجة في temperraydequate temp = integer ؛ بينما (temp! = 1) {if (temp ٪ 2 == 0) {temp = temp/2 ؛ if (newArrayDequ.contains (temp)))) }} آخر {temp = (temp*3+1)/2 ؛ if (newArrayDequ.contains (temp)))) }}}} sortedset <integer> sortedset = new Treeset <integer> () ؛ // يتم استخدام sortedset لتخزين أرقام المفاتيح لـ (عدد صحيح صحيح: newArrayDeque) {if (! elsearraydeque.contains (integer)) {sortedset.add (integer) ؛ }} int [] LeftInt = new int [sortedset.size ()] ؛ int j = sortedset.size ()-1 ؛ لـ (عدد صحيح عدد صحيح: sortedset) {leskerint [j] = integer ؛ ي-؛ } لـ (int j2 = 0 ؛ j2 <LeftInt.length ؛ j2 ++) {// إخراج رقم المفتاح بالترتيب من كبير إلى صغير إذا (j2 == LeftInt.length-1) {system.out.println (Leftint [j2]) ؛ } آخر {system.out.print (LeftInt [j2]+"") ؛ }}}}} </span>ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.