【GESP】C++二级真题 luogu-b3923, [GESP202312 二级] 小杨做题
GESP二级真题,多层循环、分支语句练习,难度★✮☆☆☆。
luogu-B3923 [GESP202312 二级] 小杨做题
题目要求
题目描述
为了准备考试,小杨每天都要做题。第 $1$ 天,小杨做了 $a$ 道题;第 $2$ 天,小杨做了 $b$ 道题;从第 $3$ 天起,小杨每天做的题目数量是前两天的总和。
此外,小杨还规定,当自己某一天做了大于或等于 $m$ 题时,接下来的所有日子里,他就再也不做题了。
请问,到了第 $N$ 天,小杨总共做了多少题呢?
输入格式
总共 $4$ 行。第一行一个整数 $a$,第二行一个整数 $b$,第三行一个整数 $m$,第四行一个整数 $N$。
保证 $0 \le a,b \le 10$;$a,b<M<1,000,000$;$3 \le N \le 364$。
输出格式
一行一个整数,表示小杨 $N$ 天里总共做了多少题目。
样例输入 #1
1
2
3
4
1
2
10
5
样例输出 #1
1
19
样例输入 #2
1
2
3
4
1
1
5
8
样例输出 #2
1
12
提示
样例解释 1:
小杨第一天做 $1$ 题,第二天做 $2$ 题,第三天做 $1+2=3$ 题,第四天做 $2+3=5$ 题,第五天做 $3+5=8$ 题。因此他总共做了 $1+2+3+5+8=19$ 题。
样例解释 2:
小杨前 $5$ 天分别做了 $1,1,2,3,5$ 题,由于第 $5$ 天小杨做了 $5$ 题,而 $m=5$,于是小杨从此以后不再做题。因此小杨总共做了 $1+1+2+3+5=12$ 题。
题目分析
解题思路
- 首先,读取输入的四个整数
a
、b
、m
、n
。 - 初始化一个变量
sum
,用于记录小杨总共做的题目数。 - 初始化一个变量
day
,用于记录每天小杨做的题目数。 - 使用一个循环来模拟小杨每天的做题过程,从第一天到第
n
天。 - 在每次循环中,首先计算小杨当天做的题目数
day
,然后将day
加到sum
上。 - 如果
day
大于等于m
,则小杨从此以后不再做题,直接输出sum
。 - 否则,继续下一天的做题过程,直到第
n
天。 - 循环结束后,输出
sum
,即小杨总共做的题目数。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
int main() {
int a, b, m, n; // 定义四个整数变量a、b、m、n
cin >> a >> b >> m >> n; // 从输入流读取四个整数到a、b、m、n
long long sum = a + b; // 初始化一个长整型变量sum,用于记录小杨总共做的题目数
int day = 0; // 初始化一个整数变量day,用于记录每天小杨做的题目数
if (a >= m) { // 如果a大于等于m
cout << a; // 直接输出a
return 0; // 程序结束
}
if (b >= m) { // 如果b大于等于m
cout << a + b; // 输出a和b的和
return 0; // 程序结束
}
for (int i = 1; i <= n - 2; i++) { // 从1到n-2进行循环
day = a + b; // 计算当天小杨做的题目数
sum += day; // 将当天做的题目数加到总和中
if (day >= m) { // 如果当天做的题目数大于等于m
break; // 跳出循环
}
a = b; // 更新a的值为b
b = day; // 更新b的值为当天做的题目数
}
cout << sum; // 输出小杨总共做的题目数
return 0; // 程序结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权