1711 字
9 分钟
GESP 2025年C++一级编程题解析
2025/03/22
2025/09/30

202509-1 商店折扣#

题目描述

商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 xx 元减 yy 元;第二种方案是直接打 nn 折,也就是说价格变为原先的 n/10n/10。这里的 x,y,nx, y, n 均是正整数,并且 1y<x1 \leq y < x1n<101 \leq n < 10

需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 1010 元减 33 元时,若挑选了价格总和为 3333 元的物品,只能减免 33 元,需要支付 3030 元。

小明在商店挑选了价格总和为 pp 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?

输入格式

四行,四个正整数 x,y,n,px, y, n, p,含义见题目描述。

输出格式

一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。

样例输入 1

8
7
9
10

样例输出 1

3.00

样例输入 2

8
7
2
11

样例输出 2

2.20

提示

对于所有测试点,保证 1y<x1001 \leq y < x \leq 1001n<101 \leq n < 101p1001 \leq p \leq 100

代码解析

根据题意,分别求出两种方案的价钱,输出其中最小值即可,注意只有在 p >= x 的时候才可以使用第一种方案,第二种方案算出的值是 double。

#include<bits/stdc++.h>
using namespace std;
int main() {
int x, y, n, p;
cin >> x >> y >> n >> p;
double a = 999;
if (p >= x) a = p - y;
double b = p * 0.1 * n;
cout << fixed << setprecision(2) << min(a, b);
return 0;
}

202509-2 金字塔#

题目描述

金字塔由 nn 层石块垒成。从塔底向上,每层依次需要 n×n,(n1)×(n1),,2×2,1×1n \times n, (n-1) \times (n-1), \cdots, 2 \times 2, 1 \times 1 块石块。请问搭建金字塔总共需要多少块石块?

输入格式

一行,一个正整数 nn,表示金字塔的层数。

输出格式

一行,一个正整数,表示搭建金字塔所需的石块数量。

样例输入 1

2

样例输出 1

5

样例输入 2

5

样例输出 2

55

提示

对于所有测试点,保证 1n501 \leq n \leq 50

代码解析

这道题目求的就是 1*1 + 2*2 + 3*3 +…+n*n 的值,for 循环从 1~n 不断累加 i*i 即可。

#include<bits/stdc++.h>
using namespace std;
int main() {
int n, sum = 0;
cin >> n;
for (int i = 1;i <= n; i++)
sum += i*i;
cout << sum;
return 0;
}

202506-1 假期阅读#

题目描述

小 A 有一本厚厚的书。这本书总共有 nn 页,小 A 一天中 最多只能阅读完其中的 kk 页。小 A 的假期总共有 tt 天 ,他想知道在假期中最多能阅读完这本书的多少页。

输入格式

第一行,一个正整数 nn,表示书的页数。

第二行,一个正整数 kk,表示小 A 每天最多阅读的页数。

第三行,一个正整数 tt,表示小 A 假期的天数。

输出格式

一行,一个整数,表示假期中所能阅读的最多页数。

样例输入 1

8
3
2

样例输出 1

6

样例输入 2

19
3
30

样例输出 2

19

提示

对于所有测试点,保证 n,k,tn,k,t 均不超过 10001000

代码解析

理论上可以阅读的页数大于书本的总页数,则输出书本的总页数

理论上可以阅读的页数小于书本的总页数,输出理论阅读页数

#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k, t;
cin >> n >> k >> t;
if (k * t > n)
cout << n;
else
cout << k*t;
return 0;
}

202506-2 值日#

题目描述

小杨和小红是值日生,负责打扫教室。小杨每 mm 天值日一 次,小红每 nn 天值日一次。今天他们两个一起值日,请问 至少多少天后,他们会再次同一天值日?

输入格式

第一行,一个正整数 mm,表示小杨的值日周期;

第二行,一个正整数 nn,表示小红的值日周期。

输出格式

一行,一个整数,表示至少多少天后他们会再次同一天值日。

样例输入 1

4
6

样例输出 1

12

提示

对于所有测试点,保证 1m,n1001 \leq m, n \leq 100

代码解析

根据题意,需要求 m 和 n 的最小公倍数,使用枚举法即可

#include<bits/stdc++.h>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
for (int i = max(m, n); i <= m*n; i++)
if (i % m == 0 && i % n == 0) {
cout << i << endl;
break;
}
return 0;
}

202503-1 图书馆里的老鼠#

题目描述

图书馆里有 nn 本书,不幸的是,还混入了一只老鼠,老鼠每 xx 小时能啃光一本书,假设老鼠在啃光一本书之前,不会啃另一本。请问 yy 小时后图书馆里还剩下多少本完整的书。

输入格式

三行,第一行一个正整数 nn,表示图书馆里书的数量;

第二行,一个正整数 xx,表示老鼠啃光一本书需要的时间;

第三行,一个正整数 yy,表示经过的总时间;

输入数据保证 yy 小时后至少会剩下一本完整的书。

输出格式

一行,一个整数,表示 yy 小时后图书馆里还剩下多少本完整的书。

样例输入 1

10
2
3

样例输出 1

8

样例输入 2

5
2
4

样例输出 2

3

提示

对于所有测试点,保证 1n,x,y10001\leq n,x,y\leq 1000,保证 yy 小时后至少会剩下⼀本完整的书。

代码解析

这道题易错点在于,题目所求的是还剩多少完整的书,所以对于老鼠啃的书的数量我们应该 向上取整, 注意变量的类型。

#include<bits/stdc++.h>
using namespace std;
int main() {
double n, x, y;
cin >> n >> x >> y;
cout << n - ceil(y / x);
return 0;
}

202503-2 四舍五入#

题目描述

四舍五入是一种常见的近似计算方法。现在,给定 nn 个整数,你需要将每个整数四舍五入到最接近的整十数。例如,4343 四舍五入后为 40405858 四舍五入后为 6060

输入格式

n+1n+1 行,第一行,一个整数 nn,表示接下来输入的整数个数。

接下来 nn 行,每行一个整数 a1,,ana_1, \cdots, a_n,表示需要四舍五入的整数。

输出格式

nn 行,每行一个整数,表示每个整数四舍五入后的结果。

样例输入 1

5
43
58
25
67
90

样例输出 1

40
60
30
70
90

提示

对于所有测试点,保证 1n1001\leq n\leq 1001ai100001\leq a_i\leq 10000

代码解析

数字先加 5,再除以 10,再乘以 10,即可得到四舍五入的整十数。

#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
int a;
cin >> a;
cout << (a+5)/10*10 << endl;
}
return 0;
}
GESP 2025年C++一级编程题解析
https://yezi.press/posts/gesp/gesp-cpp1-2025/
作者
Yezi 叶子
发布于
2025/03/22
许可协议
CC BY-NC-SA 4.0