解题思路: 直接使用递归会超时,参考缓存原理,已经计算过的年份保存下来,下次用到的话直接使用缓存,没计算过的再计算
只需要用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 人评分
WU-整除问题 (C++代码)浏览:648 |
DNA (C语言代码)浏览:564 |
关于float,double变量的几点说明浏览:1926 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:756 |
DNA (C语言代码)浏览:837 |
Tom数 (C语言代码)浏览:598 |
剪刀石头布 (C语言代码)浏览:1519 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1029 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:593 |
1392题解(大数相加)浏览:640 |