题解 | #蛇形矩阵#

蛇形矩阵

https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e

#include <stdio.h>
//这里使用思路2
/*
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
例如,当输入5时,应该输出的三角形为:
0 1 2 3  4
1 3 6 10 15 arr[0][1]=arr[0][0]+2 arr[0][2]=arr[0][1]+3=arr[0][0]+2+3 arr[0][3]=arr[0][0]+2+3+4 delta=delta+n+1

//关于递增差数列的通项公式的规律 1,1+2,1+2+3,bn=自然数前n项和=级数=(a1+an)*n/2  b_n-b_(n-1)=an*n-a_(n-1)*(n-1)+a1/2;记an-a_(n-1)为delta,则b_n-b_(n-1)=delta*(n-1)+an+a1;

思路3:其实可以不占用空间,直接输出结果,按行输出便是1,1+2,1+2+3,1+2+3.。。直到1+2+。+n
    下一行便是1+行数-1,行数+2

    第一列的元素是1,1+1,1+1+2,1+1+2+3(斐波那契数列)
*/
int RawToRawFirst(int raw);





void PrintRaw(int raw,int n)
{
    printf("%d ",RawToRawFirst(raw));
    int delta=2+raw;//初始差
    for(int i=1;i<n-raw;i++)
    {
        printf("%d",RawToRawFirst(raw)+delta);
        delta=delta+(i+raw+1)+1;
        if(i==n-raw-1) 
        {
            printf("\n");
            break;
        }
        else printf(" ");
        
    }
  
    
    //return;
}

int RawToRawFirst(int raw)
{
    if(raw==0) return 1;
    if(raw==1) return 2;
    else if(raw>1) return raw+RawToRawFirst(raw-1);
    return 0;
}
int main()
{
    int n=5;
    scanf("%d",&n);
    
    for(int i=0;i<n;i++)
    {
        PrintRaw(i,n);
        
    }
    return 0;
}

全部评论

相关推荐

野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务