这是一道水题!利用一个二维数组就可以了!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n,a[11][11],i,j,b,l;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
int x=0;
for( i=0; i<n; i++)
a[0][i]=++x;
int k=i-1;
for( j=1; j<n; j++)
a[j][k]=++x;
for( b=j-2; b>=0; b--)
a[j-1][b]=++x;
for( l=j-2; l>0; l--)
a[l][0]=++x;
for(int p=0; p<n; p++)
{
for(int q=0; q<n; q++)
{
if(a[p][q])
printf("%3d",a[p][q]);
else
printf(" ");//注意这里的空格也是三个字符!
if(q==n-1)
printf("\n");
}
}
}
return 0;
}