解题思路: 直接使用递归会超时,参考缓存原理,已经计算过的年份保存下来,下次用到的话直接使用缓存,没计算过的再计算
只需要用if判断就可以
注意事项:
参考代码:
#include"stdio.h"
int YEAR[60]={}; //定义数组,用来缓存计算过的数据
int _both(int year) //递归函数
{
int a=0,b=0;
if(year<4) return year;
{
if(YEAR[year-1]) a=YEAR[year-1]; //数组初值是0,如果保存过就是非0,直接使用
else //没保存过的话,就递归一次计算
{
a=_both(year-1);
YEAR[year-1]=a; //计算后保存在对应年份
}
if(YEAR[year-3]) b=YEAR[year-3]; //year-3同理
else
{
b=_both(year-3);
YEAR[year-3]=b;
}
return a+b; //最后把-1和-3年返回
}
}
void main()
{
int year=0;
while(scanf("%d",&year)!=EOF&&year) printf("%d\n",_both(year));
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复