0078 - Magic Square
#include <cstdio> #include <iostream> using namespace std; void Slove(int n) { int square[n][n]; for (int i=0; i<n; ++i) for (int j=0; j<n; ++j) square[i][j]=0; int x=n/2, y=(n+1)/2; square[y][x]=1; for (int number=2; number<=n*n; ++number) { ++x; ++y; while (true) { if (x >= n) x=0; if (x < 0) x=n-1; if (y >= n) y=0; if ( square[y][x] ) { --x; ++y; } if (!square[y][x] && 0<=x && x<n && 0<=y && y<n) { square[y][x]=number; break; } } } for (int i=0; i<n; ++i) { for (int j=0; j<n; ++j) printf ( "%4d", square[i][j] ); cout << endl; } } int main(void) { int n; while (cin >> n && n) Slove(n); return 0; }
Yarudake.