#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main()
{
int n=0;
int **a;
int begin=1;
printf("please input row num:\n");
scanf("%d",&n);
int max=n*n;
a=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
a[i] = (int *) malloc(n*sizeof(int));
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=1;
}
}
int i=0;
int j=0;
int k=1;
//k为方向
//k=1时,横向移动并且+1
//k=2时,左下移动
//k=3时,下移
//k=4时,右上移动
while(i!=n-1||j!=n-1)//循环次数,任何一个下标都不能到达n-1,因为下标最多就到n-1
{
if(k==1)
{
a[i][j+1]=a[i][j]+1;
j+=1;
if(i==n-1)
{
k=4;
}
else
{
k=2;
}
}
else if(k==2)
{
a[i+1][j-1]=a[i][j]+1;
j-=1;
i+=1;
if(j==0&&i!=n-1)
{
k=3;
}
else if(i==n-1)
{
k=1;
}
else
{
k=2;
}
}
else if(k==3)
{
a[i+1][j]=a[i][j]+1;
i+=1;
if(j==n-1)
{
k=2;
}
else
{
k=4;
}
}
else if(k==4)
{
a[i-1][j+1]=a[i][j]+1;
j+=1;
i-=1;
if(i==0&&j!=n-1)
{
k=1;
}
else if(j==n-1)
{
k=3;
}
else
{
k=4;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("release memory\n");
for(int i=0;i<n;i++)
{
free(a[i]);
}
printf("release done!\n");
//system("pause");
return 0;
}