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.