蛇形填数——上三角
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
Input
本题有多组数据,每组数据由一个正整数N组成。(1<=N<=22)
Output
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。
矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
Sample Input
5
Sample Output
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
#include <stdio.h> #include <string.h> int s[23][23]; int main() { int x, n, i, j, t; scanf("%d", &x); while(x--){ scanf("%d", &n); memset(s, 0, sizeof(s));//对于填数题一定记得清0,而且二维数组清0是在sizeof里写上数组名 i = j = t = 1; while(1){ while(j <= n && !s[i][j]) { s[i][j++] = t++; } if(s[i][j - 1] == n * (n+1) / 2) break; j -= 2; i++; while(i <= n && j >= 1 && !s[i][j]) { s[i++][j--] = t++; } if(s[i - 1][j + 1] == n * (n+1) / 2) break; i -= 2; j++; while(j >= 1 && !s[i][j]) { s[i--][j] = t++; } if(s[i + 1][j] == n * (n+1) / 2) break; i++; j++; } for(i = 1; i <= n; i++){ for(j = 1; j < n - i + 1; j++){ printf("%d ", s[i][j]); } printf("%d\n", s[i][j]); } } return 0; }