我的程序:
可参考http://expert.csdn.net/Expert/topic/1401/1401764.xml?temp=.5990412
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int n;
cin >> n;
int *p = new int [n * n];
for (int t = 0; t < n * n; t++)
p[t] = 0;
int x, y;//记录当前填写的位置。
x = (n - 1) / 2;
y = 0;
p[y * n + x] = 1;//在第一行中间填上1。
for (int i = 2; i <= n * n; i++)
{
x++;//当前格移到右一列
if (x >= n)
x = 0; //移出格就到第一列
y--;//当前格到上一行
if (y < 0)
y = n - 1;//移出格就到最后一行
if (p[y * n + x] != 0)
{
y++;//如果当前格被占用就到下一行
}
p[y * n + x] = i;//当前格填入值
}
//下面是输出
for (int yy = 0; yy < n; yy++)
{
for (int xx = 0; xx < n; xx++)
{
cout << setw(4) << p[yy * n + xx] << " ";
}
cout << endl;
}
delete [] p;
}