C/C++ codeint main(int argc,char **argv)
{
int N=atoi(argv[1]);
int n=N*N;
int ceng=1;
int k;
int a[N][N];
int i=N/2,j=(N-1)/2;
if(N%2==0){
a[i][j++]=n--; //rinht
a[i--][j]=n--; //up
a[i][j--]=n--; //left
a[i][j--]=n--; //left
ceng=3;
}
else{
a[i][j--]=n--;
ceng=2;
}
for(;n>0;ceng+=2){
for(k=0;k
a[i++][j]=n--;
for(k=0;k
a[i][j++]=n--;
for(k=0;k
a[i--][j]=n--;
for(k=0;k
a[i][j--]=n--;
}
for(i=0;i
for(j=0;j
printf("%d\t", a[i][j]);
printf("\n");
}
return 0;
}
------解决方案--------------------
int main()
{
int n;
cout<
cin>>n;
int a[20][20];
int left, right, up, down;
left = up = 0;
right = down = n - 1;
int s = 1;
while (left <= right)
{
for (int i=left; i<=right; i++)//顺序横向
a[up][i] = s++;
up++; //下移一行
for ( i=up; i<=down; i++)//顺序纵向
a[i][right] = s++;
right--; //左移一列
for ( i=right; i>=left; i--)//顺序横向
a[down][i] = s++;
down--; //上移一行
for ( i=down; i>=up; i--)//顺序纵向
a[i][left] = s++;
left++;
}
for ( int i=0; i
{
for (int j=0; j
printf("%3.0d ",a[i][j]);
cout << endl;
}
return 1;
}
------解决方案--------------------
一个笨法子,以前有人问过写的C/C++ code#include
#define N 100
void print(int a[][N],int n);
int main()
{
int arr[N][N],r1,r2,c1,c2,i,j,n,k;
printf("Input n:");
scanf("%d",&n);
r1=0;//第一行
c1=0;//第一列
r2=n-1;//最后行
c2=n-1;//最后列
i=1;
k=n*n;
while(1)//每次填充四个最外的边
{
for(j=c1;j<=c2;j++)
{
arr[r1][j]=i++;
}
if(i>k)
{
break;
}
r1++;
for(j=r1;j<=r2;j++)
{
arr[j][c2]=i++;
}
if(i>k)
{
break;
}
c2--;
for(j=c2;j>=c1;j--)
{
arr[r2][j]=i++;
}
if(i>k)
{
break;
}
r2--;
for(j=r2;j>=r1;j--)
{
arr[j][c1]=i++;
}
if(i>k)
{
break;
}
c1++;
}
print(arr,n);
return 0;
}
void print(int a[][N],int n)
{
int i,j;
for(i=0;i
{
for(j=0;j
{
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}