蛇形填数(二)
时间限制:2000 ms | 内存限制:65535 KB
难度:3
- 描述
-
1 2 3 4 5 12 13 14 6 11 15 7 10 8 9
跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
- 输入
- 第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000 - 输出
- 输出之后填好之后的图
- 样例输入
-
2 5 4
- 样例输出
-
1 2 3 4 5 12 13 14 6 11 15 7 10 8 9 1 2 3 4 9 10 5 8 6 7
//和蛇〈一〉的思路一致,预判下一步,控制好边界
#include<cstdio> #include<cstring> int a[1010][1010]; int main(){ int T,n,i,j,cnt1,cnt2,step; scanf("%d",&T); while(T--){ memset(a,0,sizeof(a)); scanf("%d",&n); cnt1=cnt2=n; i=j=step=1; a[1][1]=1; while(step<=(n*n+n)/2){ while(a[i][j+1]==0&&j+1<=cnt1){ a[i][++j]=++step; } if(step>=(n*n+n)/2) break; cnt1--; while(a[i+1][j-1]==0&&i+1<=cnt2){ a[++i][--j]=++step; } if(step==(n*n+n)/2) break; cnt2--; while(a[i-1][j]==0){ a[--i][j]=++step; if(step==(n*n+n)/2) break; } } for(i=1; i<=n; i++){ for(j=1; j<=n; j++){ if(a[i][j]!=0){ if(j>=n&&n<=2*n-1) printf("%d",a[i][j]); else printf("%d ",a[i][j]); } } printf("\n"); } } return 0; }