نصائح

المربعات السحرية الغريبة في جاوة

المربعات السحرية الغريبة في جاوة

من غير الواضح من الذي أتى أولاً بساحة سحرية. هناك قصة عن فيضان ضخم في الصين منذ وقت طويل. كان الناس قلقين من أنهم سيُغسلون ويحاولون إرضاء إله النهر عن طريق تقديم تضحيات. لا شيء يبدو ناجحًا حتى لاحظ الطفل سلحفاة ترتدي مربعًا سحريًا على ظهره ظل يحوم حول التضحية. أخبر الساحة الناس كيف كانت تضحياتهم كبيرة من أجل إنقاذ أنفسهم. منذ ذلك الحين ، كانت المربعات السحرية هي قمة الموضة لأي سلحفاة مميزة.

مستوى: مبتدئ

التركيز: المنطق ، المصفوفات ، الطرق

المربعات السحرية الغريبة

في حال لم تصادف أحدًا من قبل ، فإن المربع السحري هو ترتيب للأرقام المتسلسلة في مربع بحيث تضاف الصفوف والأعمدة والأقطار جميعها إلى نفس العدد. على سبيل المثال ، المربع السحري 3x3 هو:

8 1 6

3 5 7

4 9 2

يضيف كل صف وعمود وقطري ما يصل إلى 15.

غريب المربعات السحريه السؤال

يتعلق هذا التمرين بالبرمجة بإنشاء مربعات سحرية غريبة الحجم (أي ، يمكن أن يكون حجم المربع مجرد رقم فردي ، 3 × 3 ، 5 × 5 ، 7 × 7 ، 9 × 9 ، وما إلى ذلك). الحيلة في صنع مثل هذا المربع هي وضع الرقم 1 في الصف الأول والعمود الأوسط. للعثور على مكان وضع الرقم التالي ، انقل قطريًا لأعلى إلى اليمين (على سبيل المثال ، صف واحد للأعلى ، عمود واحد عبر). إذا كانت هذه الخطوة تعني أنك تسقط من المربع ، فالتفاف حول الصف أو العمود على الجانب الآخر. أخيرًا ، إذا نقلتك هذه الخطوة إلى مربع مملوء بالفعل ، عد إلى المربع الأصلي وانتقل لأسفل بواحد. كرر العملية حتى يتم ملء جميع المربعات.

على سبيل المثال ، سيبدأ المربع السحري 3 × 3 بالشكل التالي:

0 1 0

0 0 0

0 0 0

التحرك إلى الأعلى قطريًا يعني أننا نلتف حول أسفل المربع:

0 1 0

0 0 0

0 0 2

وبالمثل ، فإن التحرك القطري التالي للأعلى يعني أننا نلتف حول العمود الأول:

0 1 0

3 0 0

0 0 2

الآن ، ينتج عن التحرك المائل للأعلى مربعًا مملوءًا بالفعل ، لذلك نعود إلى حيث أتينا وننزل في صف واحد:

0 1 0

3 0 0

4 0 2

ويستمر ويواصل كل المربعات ممتلئة.

متطلبات البرنامج

  • يجب أن يكون المستخدم قادرًا على الدخول بحجم المربع السحري.
  • يجب السماح لهم فقط بإدخال رقم فردي.
  • استخدم طريقة لإنشاء المربع السحري.
  • استخدم طريقة لعرض المربع السحري.

والسؤال هو هل يمكن لبرنامجك إنشاء مربع سحري 5 × 5 مثل المربع أدناه؟

17 24  1   8 15

23  5   7 14 16

 4   6 13 20 22

10 12 19 21  3

11 18 25  2   9

ملحوظة: بصرف النظر عن جوانب البرمجة لهذا التمرين ، فهو أيضًا اختبار للمنطق. قم بكل خطوة لإنشاء المربع السحري بدوره واكتشف كيف يمكن القيام بذلك باستخدام صفيف ثنائي الأبعاد.

حل سحري غريب

يجب أن يكون برنامجك قادرًا على إنشاء المربع السحري 5 × 5 أدناه:

17 24  1   8 15

23  5   7 14 16

 4   6 13 20 22

10 12 19 21  3

11 18 25  2   9

ها هي روايتي:

استيراد java.util.Scanner ؛

الفئة العامة MagicOddSquare {

ثابت الفراغ الرئيسي العام (سلسلة الحجج) {

إدخال الماسح الضوئي = ماسح ضوئي جديد (System.in) ؛

ماجيك سكوير

منطقية isAcceptableNumber = false؛

حجم كثافة العمليات = -1 ؛

/ / تقبل فقط الأرقام الفردية

بينما (isAcceptableNumber == خطأ)

    {

System.out.println ("Enter in size of square:")؛

string sizeText = input.nextLine ()؛

size = Integer.parseInt (sizeText) ؛

إذا (الحجم٪ 2 == 0)

      {

System.out.println ("يجب أن يكون الحجم رقمًا فرديًا") ؛

isAcceptableNumber = false ؛

      }

آخر

      {

isAcceptableNumber = صواب ؛

      }

    }

magicSquare = createOddSquare (الحجم) ؛

displaySquare (مربع سحري)؛

  }

ثابت ثابت خاص createOddSquare (حجم كثافة العمليات)

  {

int magicSq = حجم صغير جديد ؛

int int = 0؛

العمود كثافة العمليات = حجم / 2 ؛

last lastRow = صف ؛

last lastumn = العمود ؛

int matrixSize = الحجم * الحجم ؛

magicSqrowcolumn = 1؛

لـ (int k = 2 ؛ k <matrixSize + 1 ؛ k ++)

    {

/ / تحقق مما إذا كنا بحاجة للالتفاف على صف معاكس

إذا (الصف - 1 <0)

      {

الصف = الحجم 1 ؛

      }

آخر

      {

صف--؛

      }

// تحقق مما إذا كنا بحاجة للالتفاف على العمود المقابل

إذا (عمود + 1 == حجم)

      {

العمود = 0 ؛

      }

آخر

      {

العمود ++؛

      }

/ / إذا لم يكن هذا الموقف فارغًا ، فارجع إلى حيث نحن

// بدأ وحرك صفًا واحدًا لأسفل

إذا (magicSqrowcolumn == 0)

      {

magicSqrowcolumn = k؛

      }

آخر

      {

صف = lastRow ؛

عمود = العمود الأخير ؛

إذا (صف + 1 == حجم)

        {

الصف = 0؛

        }

آخر

        {

صف ++؛

        }

magicSqrowcolumn = k؛

      }

lastRow = صف ؛

lastColumn = العمود ؛

    }

عودة magicSq ؛

  }

عرض الفراغ الساكن الخاص (المربع السحري)

  {

int magicConstant = 0؛

لـ (int j = 0 ؛ j <(magicSq.length) ؛ j ++)

    {

لـ (int k = 0 ؛ k <(magicSqj.length) ؛ k ++)

      {

System.out.print (magicSqjk + "") ؛

      }

System.out.print.

magicConstant = magicConstant + magicSqj0؛

    }

System.out.print ("الثابت السحري هو" + magicConstant) ؛

  }

}