蛇形填数——上三角

蛇形矩阵是由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;

}



                    



                    
View Code

 

你可能感兴趣的:(蛇形填数——上三角)