蛇形填数(二)
时间限制:
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<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #define maxn 1000+10 using namespace std; int a[maxn][maxn]; int main() { int T; scanf("%d",&T); while(T--) { memset(a,0,sizeof(a)); int n,tot=1,x=0,y=0,m; scanf("%d",&n); m=n; int s=n*(n+1)/2; a[0][0]=1; while(tot<s) { while(y<n-1&&!a[x][y+1]) a[x][++y]=++tot; while(y>0&&!a[x+1][y-1]) a[++x][--y]=++tot; while(x>=0&&!a[x-1][y]) a[--x][y]=++tot; } for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { printf("%-2d ",a[i][j]); } printf("\n"); m--; } } return 0; }
-
第一行有一个N,表示N组测试数据