Odd Magic Squares en Java

On ne sait pas qui a créé le premier un carré magique. Il y a longtemps l'histoire d'une énorme inondation en Chine. Les gens craignaient d'être emportés et tentaient d'apaiser le dieu de la rivière en faisant des sacrifices. Rien ne semblait fonctionner jusqu'à ce qu'un enfant remarque une tortue arborant un carré magique sur son dos qui contournait le sacrifice. La place a dit aux gens combien leur sacrifice devait être important pour se sauver. Depuis lors, les carrés magiques ont été à la mode pour toute tortue exigeante.

Niveau: Débutant

Concentrer: Logique, tableaux, méthodes

Carrés magiques impairs

Au cas où vous n'en auriez jamais rencontré auparavant, un carré magique est un arrangement de nombres séquentiels dans un carré de sorte que les lignes, les colonnes et les diagonales s'ajoutent au même nombre. Par exemple, un carré magique 3x3 est:

 8 1 6

 3 5 7

 4 9 2

Chaque ligne, colonne et diagonale ajoute jusqu'à 15.

Odd Magic Squares Question

Cet exercice de programmation concerne la création de carrés magiques de taille impaire (c'est-à-dire que la taille du carré ne peut être qu'un nombre impair, 3x3, 5x5, 7x7, 9x9, etc.). L'astuce pour faire un tel carré est de placer le numéro 1 dans la première ligne et la colonne du milieu. Pour trouver où placer le numéro suivant, déplacez-vous en diagonale vers le haut vers la droite (c.-à-d., Une ligne vers le haut, une colonne à travers). Si un tel mouvement signifie que vous tombez du carré, passez à la ligne ou à la colonne du côté opposé. Enfin, si le mouvement vous amène à une case déjà remplie, revenez à la case d'origine et descendez d'une case. Répétez le processus jusqu'à ce que tous les carrés soient remplis.

Par exemple, un carré magique 3x3 commencerait ainsi:

 0 1 0

 0 0 0

 0 0 0

Un déplacement en diagonale vers le haut signifie que nous nous enroulons autour du bas du carré:

 0 1 0

 0 0 0

 0 0 2

De même, le prochain déplacement en diagonale vers le haut signifie que nous passons à la première colonne:

 0 1 0

 3 0 0

 0 0 2

Maintenant, le déplacement diagonal vers le haut se traduit par un carré déjà rempli, nous retournons donc d'où nous venons et descendons une rangée:

 0 1 0

 3 0 0

 4 0 2

et ça continue encore et encore jusqu'à ce que tous les carrés soient pleins.

Exigences du programme

  • un utilisateur doit pouvoir saisir la taille du carré magique.
  • ils doivent seulement être autorisés à entrer un nombre impair.
  • utiliser une méthode pour créer le carré magique.
  • utiliser une méthode pour afficher le carré magique.

La question est de savoir si votre programme peut créer un carré magique 5x5 comme celui ci-dessous?

 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 

Allusion: Outre les aspects de programmation de cet exercice, c'est aussi un test de logique. Passez chaque étape de la création du carré magique à tour de rôle et voyez comment cela peut être fait avec un tableau à deux dimensions.

Odd Magic Square Solution

Votre programme aurait dû être capable de créer le carré magique 5x5 ci-dessous:

 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 

Voici ma version:

 import java.util.Scanner;

 public class MagicOddSquare 

 

   public static void main (String [] args) 

     Entrée scanner = nouveau scanner (System.in);

     int [] [] magicSquare;

     boolean isAcceptableNumber = false;

     taille int = -1;

 

     // accepte uniquement les nombres impairs

     while (isAcceptableNumber == false)

     

       System.out.println ("Entrez la taille du carré:");

       String sizeText = input.nextLine ();

       size = Integer.parseInt (sizeText);

       si (taille% 2 == 0)

       

         System.out.println ("La taille doit être un nombre impair");

         isAcceptableNumber = false;

       

       autre

       

         isAcceptableNumber = true;

       

     

 

     magicSquare = createOddSquare (taille);

     displaySquare (magicSquare); 

   

 

   int statique statique [] [] createOddSquare (taille int)

   

     int [] [] magicSq = new int [taille] [taille];

     int row = 0;

     colonne int = taille / 2;

     int lastRow = ligne;

     int lastColumn = colonne;

     int matrixSize = taille * taille; 

 

     magicSq [ligne] [colonne] = 1;

     pour (int k = 2; k < matrixSize+1;k++)

     

       // vérifie si nous devons passer à la ligne opposée

       if (ligne - 1 < 0)

       

         ligne = taille-1;

       

       autre

       

         rangée--;

       

 

       // vérifie si nous devons encapsuler dans la colonne opposée

       if (colonne + 1 == taille)

       

         colonne = 0;

       

       autre

       

         colonne ++;

       

 

       // si cette position n'est pas vide, retournez à l'endroit où nous

       // commencé et déplacer une ligne vers le bas

       if (magicSq [ligne] [colonne] == 0)

       

         magicSq [ligne] [colonne] = k;

       

       autre

       

         row = lastRow;

         column = lastColumn;

         if (ligne + 1 == taille)

         

           ligne = 0;

         

          autre

         

           row ++;

         

         magicSq [ligne] [colonne] = k;

       

       lastRow = ligne;

       lastColumn = colonne; 

     

     return magicSq;

   

 

   displaySquare vide privé statique (int [] [] magicSq)

   

     int magicConstant = 0;

     pour (int j = 0; j<(magicSq.length);j++)

     

       pour (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 ("La constante magique est" + magicConstant);