将1、2、3...、n2放入二维数组中,放数的顺序如
下图=4的情况。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
这是我对此题的想法,也许有更简单的方法。请大家指正。
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
#define n 10
main()
{
int i,j,k=0;
int a[n][n];
/* int **a;
printf("please input n=\n");
scanf("%d",&n);
fflush(stdin);
a=(int **)malloc(n*n*sizeof(int *));
if(a==NULL)
{
printf("No enough memory\n");
return;
}
*/
for(i=0;i<n-2;i++,k++) /* 把矩阵看成(n-2)层,一层一层的输入数据 */
{
for(j=i;j<n-k;j++) /* 输入第(k+1)层的第一条边上的数据*/
a[i][j]=((j==0)?1:(a[i][j-1]+1));
j--;
for(i=i+1;i<n-k;i++)
a[i][j]=a[i-1][j]+1;
i--;
for(j=j-1;j>=k;j--)
a[i][j]=a[i][j+1]+1;
j++;
for(i=i-1;i>k;i--)
a[i][j]=a[i+1][j]+1;
i=k;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
getch();
}
我用/*...*/里面的代码,即用**a代替具体的数组结果总是不稳定,不知道怎么回事,希望知道的能告诉我下。