1041 蛇行矩阵(两种方法)

题目描述

蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。

输入

本题有多组数据,每组数据由一个正整数N组成。(N不大于100)

输出

对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。

样例输入

5

样例输出

1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

提示

来源


第一种方法我先讲下思路,这会儿没空写代码了,看第一行,第二个数比第一个数多2,第三个比第二个多3,第四个比第三个多4......以此类推,第一行n个数

第二行,第一个数比第一行的第二个数少1,第二个数比第一行的第三个数少1,以此类推,第二行n-1个数

第三行,第一个数比第二行的第二个数少1,第二个数比第二行的第三个数少1,以此类推,第三行n-2个数

......

一共n行


第二种方法:第一行,第二个数比第一个数多2,第三个比第二个多3,第四个比第三个多4......以此类推,第一行n个数

第二行的第一个数比第一行的第一个数多1,然后第二行的第二个数比第二行的第一个数多3,第二行的第三个数比第二行的第二个数多4......以此类推,第二行n-1个数

第三行的第一个数比第二行的第一个数多2,然后第三行的第二个数比第三行的第一个数多4,第三行的第三个数比第三行的第二个数多5......以此类推,第三行n-2个数

......

一共n行


代码示例:

 
#include
void main(){
    int n,i,j,k,s,x;
    while(scanf("%d",&n)!=EOF){
        s=0,x=1;
        for(i=0;i<=n;i++){
            x=x+i;
            s=x;
            for(j=1;j<=n-i;j++){
                if(j==1){
                    printf("%d",s);
                }
                else{
                    s=s+j+i;
                    printf(" %d",s);
                }
            }
            if(i             printf("\n");
        }
    }
}
 
/**************************************************************
    Problem: 1041
    User: 171530425
    Language: C
    Result: 正确
    Time:0 ms
    Memory:1092 kb
****************************************************************/
 


你可能感兴趣的:(算法练习)