这个题主要是要细心。我们可以把它看成一个三角形一层层的循环就好了
#include<stdio.h>
int a[1000][1000];
void F(int n,int m){
int i,j;
if(m>=n/2)
return;
for(i=1+m;i<=n-m*2;i++)
a[m+1][i]=a[m+1][i-1]+1;//计算三角形的长
for(i=m+2,j=0;i<=n-m*2;j++,i++)
a[i][n-1-2*m-j]=a[i-1][n-2*m-j]+1;// 计算三角形的斜边
for(i=n-1-m*2;i>m+1;i--)
a[i][m+1]=a[i+1][m+1]+1;//计算三角形的高
F(n,m+1);
}
int main(){
int n,m,i,j;
a[1][0]=0;
scanf("%d",&m);
while(m--){
scanf("%d",&n);
a[1][1]=1;
F(n,0);
for(i=1;i<=n;i++){
printf("%d",a[i][1]);
for(j=2;j<=n+1-i;j++)
printf(" %d",a[i][j]);
printf("\n");
}
}
return 0;
}