解题思路:

3^0

3^1  3^0+3^1

3^2  3^0+3^2  3^1+3^2  3^0+3^1+3^2

以此类推,发现规律为:比如第三行第三个数是第三行的开头3^2加上第二行的第一个数3^1,第三行第四个数是第三行的开头3^2加上第二行第二个数3^0+3^1,由此想到使用递推填充数组后直接输出答案。


注意事项:

参考代码:

#include<stdio.h>


long long int f(int k,int i){//一个简单的k次方函数

    long long int last=1;

    for(int j=1;j<=i;j++){

        last=last*k;

    }

    return last;

}


int main()

{

    int k,N,max1,max2=0,i;

    long long int n[1001]={0};

    scanf("%d %d",&k,&N);

    

    for(i=1;i<=1000;i++){//循环来使用递推向数组充填数值

        

        if(i==f(2,max2)){//判断当在每行第一个位置且未超出范围时

            

            n[i]=f(k,max2);

            max1=n[i];  //max1 max2 起到标记位置的作用

            max2++;

        }

        

        else n[i]=max1+n[i-f(2,max2-1)];//数列的规律,每行的非第一个位置应该填的数,max1为该行第一个数,n[i-f(2,max2-1)]为前面的数

    }

    

    printf("%lld",n[N]);

    


return 0;

    

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

东星耀阳 3年前 回复TA
俺表示完全看不懂
Talog 5年前 回复TA
大佬这道题能不能用递归做啊……