Computerwissenschaften

Programmierübung für Odd Magic Squares in Java

Es ist unklar, wer zuerst ein magisches Quadrat erfunden hat. Es gibt eine Geschichte über eine große Flut in China vor langer Zeit. Die Menschen befürchteten, sie würden weggespült und versuchten, den Flussgott durch Opfer zu besänftigen. Nichts schien zu funktionieren, bis ein Kind eine Schildkröte mit einem magischen Quadrat auf dem Rücken bemerkte, das das Opfer immer wieder umkreiste. Der Platz sagte den Menschen, wie groß ihr Opfer sein musste, um sich selbst zu retten. Seitdem sind magische Quadrate der Höhepunkt der Mode für jede anspruchsvolle Schildkröte.

Level: Anfänger

Fokus: Logik, Arrays. Methoden

 

Seltsame magische Quadrate

Falls Sie noch nie zuvor auf eines gestoßen sind, ist ein magisches Quadrat eine Anordnung von fortlaufenden Zahlen in einem Quadrat, sodass sich die Zeilen, Spalten und Diagonalen zu derselben Zahl addieren. Zum Beispiel ist ein 3×3 magisches Quadrat:


 8 1 6

 

 3 5 7

 

 4 9 2

Jede Zeile, Spalte und Diagonale ergibt 15.

 

Seltsame magische Quadrate Frage

Diese Programmierübung befasst sich mit der Erstellung von magischen Quadraten ungerader Größe (dh die Größe des Quadrats kann nur eine ungerade Zahl sein, 3×3, 5×5, 7×7, 9×9 usw.). Der Trick bei der Erstellung eines solchen Quadrats besteht darin, die Nummer 1 in die erste Zeile und mittlere Spalte zu setzen. Um herauszufinden, wo die nächste Nummer platziert werden soll, bewegen Sie sich diagonal nach rechts oben (dh eine Zeile nach oben, eine Spalte nach oben). Wenn eine solche Bewegung bedeutet, dass Sie vom Quadrat fallen, wickeln Sie sich in die Zeile oder Spalte auf der gegenüberliegenden Seite. Wenn der Zug Sie zu einem bereits gefüllten Quadrat führt, kehren Sie zum ursprünglichen Quadrat zurück und bewegen Sie sich um eins nach unten. Wiederholen Sie den Vorgang, bis alle Quadrate ausgefüllt sind.

Zum Beispiel würde ein 3×3 magisches Quadrat folgendermaßen beginnen:


 0 1 0

 

 0 0 0

 

 0 0 0

Eine Bewegung diagonal nach oben bedeutet, dass wir uns bis zum unteren Rand des Quadrats wickeln:


 0 1 0

 

 0 0 0

 

 0 0 2

Ebenso bedeutet die nächste diagonale Bewegung nach oben, dass wir uns um die erste Spalte drehen:


 0 1 0

 

 3 0 0

 

 0 0 2

Jetzt führt die diagonale Aufwärtsbewegung zu einem Quadrat, das bereits gefüllt ist. Wir kehren also dorthin zurück, wo wir herkommen, und lassen eine Reihe nach unten fallen:


 0 1 0

 

 3 0 0

 

 4 0 2

und es geht weiter und weiter, bis alle Quadrate voll sind.

 

Programmanforderungen

  • Ein Benutzer muss in der Lage sein, die Größe des magischen Quadrats einzugeben.
  • Sie dürfen nur eine ungerade Zahl eingeben.
  • Verwenden Sie eine Methode, um das magische Quadrat zu erstellen.
  • Verwenden Sie eine Methode, um das magische Quadrat anzuzeigen.

Die Frage ist, ob Ihr Programm ein magisches 5×5-Quadrat wie das folgende erstellen kann.


 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

Hinweis: Abgesehen von den Programmieraspekten dieser Übung ist es auch ein Test der Logik. Machen Sie nacheinander jeden Schritt, um das magische Quadrat zu erstellen, und finden Sie heraus, wie dies mit einem zweidimensionalen Array möglich ist .

 

Odd Magic Square Lösung

Ihr Programm sollte in der Lage sein, das folgende magische 5×5-Quadrat zu erstellen:


 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

Hier ist meine Version:


 import java.util.Scanner;

 

 öffentliche Klasse MagicOddSquare {

 


 

   public static void main (String [] args) {

 

 Scannereingabe=neuer Scanner (System.in);

 

 int [] [] magicSquare;

 

 boolean isAcceptableNumber=false;

 

 int size=-1;

 


 

 // akzeptiere nur ungerade Zahlen

 

 while (isAcceptableNumber == false)

 

 {

 

   System.out.println ("Geben Sie die Größe des Quadrats ein:");

 

   String sizeText=input.nextLine ();

 

   size=Integer.parseInt (sizeText);

 

   if (Größe% 2 == 0)

 

   {

 

 System.out.println ("Die Größe muss eine ungerade Zahl sein");

 

 isAcceptableNumber=false;

 

   }}

 

   sonst

 

   {

 

 isAcceptableNumber=true;

 

   }}

 

 }}

 


 

 magicSquare=createOddSquare (Größe);

 

 displaySquare (magicSquare);

 

   }}

 


 

   private static int [] [] createOddSquare (int size)

 

   {

 

 int [] [] magicSq=new int [Größe] [Größe];

 

 int row=0;

 

 int column=size / 2;

 

 int lastRow=row;

 

 int lastColumn=column;

 

 int matrixSize=s
ize * size;

 


 

 magicSq [Zeile] [Spalte]=1;

 

 für (int k=2; k

 

 {

 

   // überprüfe, ob wir in die gegenüberliegende Zeile umbrechen müssen

 

   if (Zeile - 1 <0)

 

   {

 

 Zeile=Größe 1;

 

   }}

 

   sonst

 

   {

 

 Reihe--;

 

   }}

 


 

   // prüfe ob wir in die gegenüberliegende Spalte umbrechen müssen

 

   if (Spalte + 1 == Größe)

 

   {

 

 Spalte=0;

 

   }}

 

   sonst

 

   {

 

 Spalte ++;

 

   }}

 


 

   // Wenn diese Position nicht leer ist, gehe zurück zu unserer Position

 

   // gestartet und eine Zeile nach unten verschoben

 

   if (magicSq [Zeile] [Spalte] == 0)

 

   {

 

 magicSq [Zeile] [Spalte]=k;

 

   }}

 

   sonst

 

   {

 

 row=lastRow;

 

 column=lastColumn;

 

 if (Zeile + 1 == Größe)

 

 {

 

   Zeile=0;

 

 }}

 

  sonst

 

 {

 

   row ++;

 

 }}

 

 magicSq [Zeile] [Spalte]=k;

 

   }}

 

   lastRow=row;

 

   lastColumn=column;

 

 }}

 

 return magicSq;

 

   }}

 


 

   private static void displaySquare (int [] [] magicSq)

 

   {

 

 int magicConstant=0;

 

 für (int j=0; j <(magicSq.length); j ++)

 

 {

 

   für (int k=0; k <(magicSq [j] .length); k ++)

 

   {

 

 System.out.print (magicSq [j] [k] + "");

 

   }}

 

   System.out.print;

 

   magicConstant=magicConstant + magicSq [j] [0];

 

 }}

 

  System.out.print ("Die magische Konstante ist" + magicConstant);

 

   }}

 

 }}

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.