Un quadrato magico è un quadrato di questo tipo:
$((16,3,2,13),(5,10,11,8),(9,6,7,12),(4,15,14,1))$
[questo quadrato magico proviene da un'incisione di Albrecht Dürer del 1514]
Dove la somma delle righe, delle colonne e delle diagonali sono identiche.
Scrivere un programma che stampi un quadrato magico $n*n$, dove la somma delle righe, delle colonne e delle diagonali è sempre la stessa. L'utente specificherà il valore di $n$.
Schermata tipica:
This program creates a magic square of a specified size.
The size must be an odd number between $1$ and $99$.
Enter the size of the magic square: 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))$
Suggerimento: iniziare mettendo il numero $1$ in mezzo alla riga $0$.
Mi potreste dare qualche spunto/suggerimento su come si può fare?
Ci sono anche degli ulteriori suggerimenti aggiuntivi:
Disporre i numeri rimanenti 2,3,... $n^2$ movendosi in su di una riga e di una colonna. Qualsiasi tentativo di andare oltre i limiti del vettore deve "arrotolarsi"1 sulla faccia opposta del vettore stesso. Per esempio invece di memorizzare il prossimo numero nella colonna $n$, lo memorizzerà nella colonna $0$. Se un particolare elemento del vettore è già occupato mettere il numero immediatamente sotto il numero che è stato memorizzato precedentemente. Se il vostro compilatore supporta i vettori a lunghezza variabile, dichiarare un vettore di n righe ed n colonno, In caso contrario dichiarare il vettore in maniera tale che abbia $99$ righe e $99$ colonne.
Sarebbe da usare dei cicli.
- Sta proprio scritto così ↑