解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复