蛇形填数——上三角

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

 

posted @ 2013-08-17 10:19  心中的阿哲  阅读(346)  评论(0编辑  收藏  举报