【GESP】C++二级练习 luogu-p2669, [NOIP2015 普及组] 金币
GESP二级练习,循环分支嵌套,略有难度,难度★✮☆☆☆。
luogu-P2669 [NOIP2015 普及组] 金币
题目要求
题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 $n$ 天每天收到 $n$ 枚金币后,骑士会在之后的连续 $n+1$ 天里,每天收到 $n+1$ 枚金币。
请计算在前 $k$ 天里,骑士一共获得了多少金币。
输入格式
一个正整数 $k$,表示发放金币的天数。
输出格式
一个正整数,即骑士收到的金币数。
样例输入 #1
1
6
样例输出 #1
1
14
样例输入 #2
1
1000
样例输出 #2
1
29820
提示
【样例 1 说明】:
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到 $1+2+2+3+3+3=14$ 枚金币。
对于 $100\%$ 的数据,$1\le k\le 10^4$。
题目分析
方法一
- 初始化一个变量
count
来存储骑士收到的金币总数。 - 初始化一个变量
days
来表示当前的天数,初始值为 1。 - 使用一个循环来模拟每一天的金币发放。每次循环,骑士会在连续
days
天内,每天收到days
枚金币。 - 在每次循环中,使用一个内部循环来模拟连续
days
天的金币发放。每天,count
会增加days
枚金币,i
会增加 1,表示时间流逝。 - 当内部循环结束后,
days
会增加 1,表示骑士开始收到更多的金币。 - 当
i
等于或超过k
时,循环结束,输出count
的值,即骑士在前k
天收到的金币总数。4
方法二
- 初始化一个变量
count
来存储骑士收到的金币总数。 - 初始化一个变量
days
来表示当前的天数,初始值为 1。 - 初始化一个变量
now_coins
来表示当前天数收到的金币数,初始值为 1。 - 使用一个循环来模拟每一天的金币发放。每次循环,骑士会在连续
days
天内,每天收到now_coins
枚金币。 - 在每次循环中,
count
会增加now_coins
枚金币,days
会减少 1,表示时间流逝。 - 当
days
等于 0 时,now_coins
会增加 1,表示骑士开始收到更多的金币,days
会重置为now_coins
。 - 当
i
等于或超过k
时,循环结束,输出count
的值,即骑士在前k
天收到的金币总数。
示例代码
方法一代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main() {
int k; // 输入的整数
cin >> k;
int count = 0; // 计数器
int days = 1; // 天数
int temp_count = 0; // 临时计数器
for (int i = 1; i <= k; ) { // 主循环
for (int j = 1; j <= days && i <= k; j++) { // 内循环
count += days; // 计数器累加
i++; // 主循环计数器递增
}
days++; // 天数递增
}
cout << count; // 输出计数器的值
return 0;
}
方法二代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main() {
int k; // 输入的整数
cin >> k;
int count = 0; // 计数器
int days = 1; // 当前天数
int now_coins = 1; // 当前天数收到的金币数
for (int i = 1; i <= k; i++) { // 从1到k天的循环
count += now_coins; // 计数器累加当前天数的金币数
days--; // 天数减1
if (days == 0) { // 如果天数减到0
now_coins++; // 当前天数收到的金币数增加1
days = now_coins; // 重置天数为当前天数收到的金币数
}
}
cout << count; // 输出计数器的值
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权