- MysGln 的博客
GESP1级-A题
- @ 2024-11-16 15:47:13
GESP-1 前置知识点
- 掌握
cin和cout以及三种逻辑运算符。 - 掌握分支结构运行逻辑和使用方式。
- 掌握循环结构运行逻辑和使用方式。
- 明白什么是「表达式」。
- 明白代码由三个部分组成:输入部分,数据处理,输出部分。
- 掌握小学数学里的用字母表示数字。
#include <iostream>
using namespace std;
int main() {
// 处理输入
// 处理数据
// 处理输出
return 0;
}
题单
题目分析
数学应用题
开学了,小明来到文具店选购文具。签字笔 元一支,他需要 1 支;记事本 元一本,他需要 1 本;直尺 元一把,他需要 1 把。小明手里有 元钱。请你帮小明算算,他手里的钱是否够买他需要的文具。
GESP题
开学了,小明来到文具店选购文具。签字笔 元一支,他需要 X 支;记事本 元一本,他需要 Y 本;直尺 元一把,他需要 Z 把。小明手里有 Q 元钱。请你通过编程帮小明算算,他手里的钱是否够买他需要的文具。
可以发现,A 题就是一道数学应用题,其中的一些数据用未知量来替代,对应小学数学里「未知数」和「方程」的知识点,考核的点为学生是否可以理解用字母代替数字写出表达式。
数学应用题里是通过列等式求解:
$$\begin{align*} \text{总花费} &= 2 \times 1 + 5 \times 1 + 3 \times 1\\ \text{总花费} &= 10 \\ \text{差值} &= 20 - 10\\ &= 10 \end{align*}$$答:因为差值大于 0,所以可以购买,剩下 10 块钱。
代码题把其中一些数字替换成了字母,按照题目给定的字母及其含义,我们进行同样的替换,即得到下式:
$$\begin{align*} \text{总花费} &= 2 \times X + 5 \times Y + 3 \times Z \\ \text{差值} &= Q - \text{总花费} \end{align*}$$补全输入和输出部分即可完成本题。
// 处理输入,变量含义如题所示
int X, Y, Z;
cin >> X >> Y >> Z >> Q;
//处理数据,S 表示总花费, d 表示差值
int S = 2 * X + 5 * Y + 3 * Z;
int d = Q - S;
// 处理输出
if (d >= 0) {
cout << "Yes" << '\n' << d;
} else {
cout << "No" << '\n' << -d;
}
解法
用样例里的数据,替换掉题面描述中的字母,当作应用题来写出表达式,一方面验证自己的表达式是否正确,一方面方便下一步的替换。
表达式正确,那么在纸上可以计算出来和样例一样的结果,再把表达式里的字母替换回去即可。
样题使用
小杨有 元钱用于购物。商品 A 的单价是 元,商品 B 的单价是 元。小杨想购买相同数量的商品 A 和商品 B。
请你编写程序帮助小杨计算出他最多能够购买多少个商品 A 和商品 B。
12
1
2
4
纸上或者注释
$$\begin{align*} \text{一套价格} &= 1 + 2 \\ &= 3 \\ \text{套数} &= \frac{12}{3} \\ &= 4 \end{align*}$$和样例输出一样,表达式正确。
替换
$$\begin{align*} \text{一套价格} &= A + B \\ \text{套数} &= \frac{N}{一套价格} \\ &= \frac{N}{A+B} \end{align*}$$写代码
通过注释写清楚,一套价格,套数分别用什么变量表示
#include <iostream>
using namespace std;
int main() {
// N, A, B 含义如题所示
// C 表示一套价格,ans 表示套数
// 处理读入
int N, A, B;
cin >> N >> A >> B;
// 处理数据
int C = A + B;
int ans = N / (A + B);
// 处理读入
cout << ans << '\n';
return 0;
}