原题链接:K-进制数
解题思路:
看到题目的n和k给的很少的时候
下意识地意识到出题人是要降低时间复杂度
时间复杂度低了,就可以用递归了,所以往递归方面去想了
仔细思考一下,其实这道题并不难
递归如下:F[A]=F[A-1]+F[A-2]
FA就是全部的数,它等于前面少一位的数是零和不是零的情况相加
F[A-1]是零的情况就是F[A-2]
于是答案就出来了
注意事项:
有一位和有两位的数目情况要想清楚,不要用十进制的加减得出来!!!
参考代码:
#include <iostream>
int k;
using namespace std;
int s(int n)
{
if(n==1) return k;
else if(n==2) {return k*(k+1);}
else
return (s(n-1)+s(n-2))*k;
}
int main()
{
int n;
cin>>n>>k;
k--;
int c=s(n);
cout<<c<<endl;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复