Input array size N (1~20)
Using Two-Dimensional array
Using Two-Dimensional array
输入数组大小(1 - 20):
输出结果:
固定数组版:
#include <stdio.h>
int main()
{
int a[20][20],num,count,i,j,k,kend,lend;
printf("Input a number[1-20]: ");
scanf("%d",&num);
kend=num/2;
lend=num;
count=1;
for( i=0,j=0,k=0; k<kend; k++ )
{
a[i][j]=count++;
for(j++;j<lend;j++)
a[i][j]=count++;
for(i++,j--;i<lend;i++)
a[i][j]=count++;
for(i--,j--;j>=k;j--)
a[i][j]=count++;
for(i--,j++;i>k;i--)
a[i][j]=count++;
i++;j++;lend--;
}
if(num%2 != 0) a[i][j]=count;
for( i=0; i<num; i++ )
{
for( j=0; j<num; j++ )
printf("%4d ",a[i][j]);
printf("\n");
}
}
动态数组版1:动态申请一个大的一维数组,通过下标按二维数组使用。
#include <stdio.h>
int main()
{
int num,count,i,j,k,kend,lend;
printf("Input a number[1-20]: ");
scanf("%d",&num);
int *a=new int [num*num];
kend=num/2;
lend=num;
count=1;
for( i=0,j=0,k=0; k<kend; k++ )
{
a[i*num+j]=count++;
for(j++;j<lend;j++)
a[i*num+j]=count++;
for(i++,j--;i<lend;i++)
a[i*num+j]=count++;
for(i--,j--;j>=k;j--)
a[i*num+j]=count++;
for(i--,j++;i>k;i--)
a[i*num+j]=count++;
i++;j++;lend--;
}
if(num%2 != 0) a[i*num+j]=count;
for( i=0; i<num; i++ )
{
for( j=0; j<num; j++ )
printf("%4d ",a[i*num+j]);
printf("\n");
}
delete []a;
}
动态数组版2:用二级指针变量,动态申请数组。
#include <stdio.h>
int main()
{
int **a;
int num,count,i,j,k,kend,lend;
printf("Input a number[1-20]: ");
scanf("%d",&num);
a = new int *[num]; //动态申请指针数组
for( i=0; i<num; i++)
{
a[i] = new int[num]; //动态申请数组
}
kend=num/2;
lend=num;
count=1;
for( i=0,j=0,k=0; k<kend; k++ )
{
a[i][j]=count++;
for(j++;j<lend;j++)
a[i][j]=count++;
for(i++,j--;i<lend;i++)
a[i][j]=count++;
for(i--,j--;j>=k;j--)
a[i][j]=count++;
for(i--,j++;i>k;i--)
a[i][j]=count++;
i++;j++;lend--;
}
if(num%2 != 0) a[i][j]=count;
for( i=0; i<num; i++ )
{
for( j=0; j<num; j++ )
printf("%4d ",a[i][j]);
printf("\n");
}
for( i=0; i<num; i++)
{
delete []a[i];
}
delete []a;
}