问题描述:
为了准备考试,小杨每天都要做题。第一天做了a道题;第二天做了b道题;从第三天起,小杨每天做的题目数量是前两天的总和。
此外,小杨还规定当自己某一天做了大于或等于m题时,接下来的日子,他就不做题了。
请问到了第n天,小杨总共做了多少道题?
输入描述:
总共4行。第一行一个整数a,第二行一个整数b,第三行一个整数m,第四行·一个·整数n。
输出描述:
一行一个整数,表示小杨n天总共做的题数
输入样例:
1
2
10
5
输出样例:
19
题目分析:
1.特殊处理无法递推的项,一般情况是1,2项
c[1]=a;
c[2]=b;
2.找规律(第一天做了a道题,第二天做了b道题,第三天做的是前两天之和)
3.按规律预处理(如果项数少就直接预处理)
代码:
#include<iostream>
using namespace std;
int c[375];
int main()
{
int a,b,n,i,m,s=0;
cin>>a>>b>>m>>n;
c[1]=a;//因为第一二项无法预推,所以要给初值
c[2]=b;
for(i=3;;i++)//不知道做了多少天才大于m道题,所以循环第二个语句不写,表示无限循环
{
c[i]=c[i-1]+c[i-2];//计算每天做的题数(第三天=前两天做题之和)
if(c[i]>=m)//如果做的题大于m道题时,结束循环
{
break;
}
}
for(i=1;i<=n;i++)//枚举第一天到第n天
{
s=s+c[i];//对小杨n天做的题进行求和
}
cout<<s;
return 0;
}