[GESP202312 二级] 小杨做题
题目描述
为了准备考试,小杨每天都要做题。第 1 1 1 天,小杨做了 a a a 道题;第 2 2 2 天,小杨做了 b b b 道题;从第 3 3 3 天起,小杨每天做的题目数量是前两天的总和。
此外,小杨还规定,当自己某一天做了大于或等于 m m m 题时,接下来的所有日子里,他就再也不做题了。
请问,到了第 N N N 天,小杨总共做了多少题呢?
输入格式
总共 4 4 4 行。第一行一个整数 a a a,第二行一个整数 b b b,第三行一个整数 m m m,第四行一个整数 N N N。
保证 0 ≤ a , b ≤ 10 0 \le a,b \le 10 0≤a,b≤10; a , b < M < 1 , 000 , 000 a,b<M<1,000,000 a,b<M<1,000,000; 3 ≤ N ≤ 364 3 \le N \le 364 3≤N≤364。
输出格式
一行一个整数,表示小杨 N N N 天里总共做了多少题目。
样例 #1
样例输入 #1
1
2
10
5
样例输出 #1
19
样例 #2
样例输入 #2
1
1
5
8
样例输出 #2
12
提示说明
样例解释 1
小杨第一天做 1 1 1 题,第二天做 2 2 2 题,第三天做 1 + 2 = 3 1+2=3 1+2=3 题,第四天做 2 + 3 = 5 2+3=5 2+3=5 题,第五天做 3 + 5 = 8 3+5=8 3+5=8 题。因此他总共做了 1 + 2 + 3 + 5 + 8 = 19 1+2+3+5+8=19 1+2+3+5+8=19 题。
样例解释 2
小杨前 5 5 5 天分别做了 1 , 1 , 2 , 3 , 5 1,1,2,3,5 1,1,2,3,5 题,由于第 5 5 5 天小杨做了 5 5 5 题,而 m = 5 m=5 m=5,于是小杨从此以后不再做题。因此小杨总共做了 1 + 1 + 2 + 3 + 5 = 12 1+1+2+3+5=12 1+1+2+3+5=12 题。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=410;
ll va[N];
int main()
{
ll a,b,m,n;
cin>>a>>b>>m>>n;
ll num=0;
num+=a;
if(a>=m)
{
cout<<num<<endl;
return 0;
}
num+=b;
if(b>=m)
{
cout<<num<<endl;
return 0;
}
va[1]=a;va[2]=b;
for(ll i=3;i<=n;i++)
{
va[i]=va[i-1]+va[i-2];
num+=va[i];
if(va[i]>=m) break;
}
cout<<num<<endl;
return 0;
}