用转圈法,注意转圈要在循环里面
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int str[100][100];
int n=0;
while(cin>>n)
{
if(n==0)break;
else if(n==1) cout<<'1'<<endl;
else
{
int top=0,bottom=n-1,left=0,right=n-1;
for(int cishu=0;cishu<n;cishu++)
{
int num=1;
for(int i=left;i<right;i++)
{str[top][i]=num;num++;}
for(int i=top;i<bottom;i++)
{str[i][right]=num;num--;}
for(int i=right;i>left&&bottom>top;i--)
{str[bottom][i]=num;num++;}
for(int i=bottom;i>=top+1&&left<right;i--)
{str[i][left]=num;num--;}
left++;right--;top++;bottom--;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<str[i][j]<<' ';
cout<<endl;
}
}
cout<<endl;
}
return 0;
}