//由内而外去填充每一个数,寻找每一个应该填的地方的数的下标的共性,先判断这个矩阵中最大的数是多少。奇数为(n+1)/2,偶数为n/2。然后定义一个数m为最大的数,发现数组下标中含有m-1的位置会是m(外围也会有一部分被赋成m,后边会被新的值覆盖,不用担心),然后m自减,用同样的方法将每一个数填充。
//代码可能不是很美观,请各位大佬指正(其实刚开始想写while(cin << c),但是最后一直会多输出一个换行符,才改成这种样子(流汗黄豆)))
include [HTML_REMOVED]
using namespace std;
int main()
{
int c;
while (1)
{
cin >> c;
if(c!=0)
{
int a[c][c];
int i=0;
int j;
int m;
if(c%2 != 0)
{
m=c/2+1;
}
else m=c/2;
for (m;m>0;m--)
{
i=0;
for (i;i<c;i++)
{
for (j=0;j<c;j++)
{
if(i==m-1||j==m-1||i==c-m||j==c-m)
{
a[i][j]=m;
}
}
}
}
i=0;
for (i;i<c;i++)
{
for (j=0;j<c;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
else
return 0;
}
}