1.蛇形填数
描述
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
输入
第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000。
输出
输出之后填好之后的图
样例输入
2
5
描述
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
这道题目和PATA1105是类似的:
#include<cstdio>
#include<cstring>
const int maxn = 1000+10;
int A[maxn][maxn];
int main(){
int N;
scanf("%d",&N);
while(N--){
int n;
scanf("%d",&n);
if(n==1){
printf("1\n");
printf("\n");
continue;
}
memset(A,0,sizeof(A));
int x=0,y=0;
int total = 1;
A[x][y] = 1;
while(total<n*(n+1)/2){
while(y+1<n&&A[x][y+1]==0){//预判并往右走
A[x][++y] = ++total;
}
while(x+1<n&&y-1>=0&&A[x+1][y-1]==0){//预判并往向下走
A[++x][--y] = ++total;
}
while(x-1>=0&&A[x-1][y] == 0){//预判并往上走
A[--x][y] = ++total;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n-i;j++){
if(j!=0) printf(" ");
printf("%d",A[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}