GESP-1 前置知识点

  1. 掌握 cincout 以及三种逻辑运算符。
  2. 掌握分支结构运行逻辑和使用方式。
  3. 掌握循环结构运行逻辑和使用方式。
  4. 明白什么是「表达式」。
  5. 明白代码由三个部分组成:输入部分,数据处理,输出部分。
  6. 掌握小学数学里的用字母表示数字。
#include <iostream>
using namespace std;

int main() {
// 处理输入

// 处理数据

// 处理输出
  
  return 0;
}

题单

GESP-1级代码题集

题目分析

数学应用题

开学了,小明来到文具店选购文具。签字笔 22 元一支,他需要 1 支;记事本 55 元一本,他需要 1 本;直尺 33 元一把,他需要 1 把。小明手里有 2020 元钱。请你帮小明算算,他手里的钱是否够买他需要的文具。

GESP题

开学了,小明来到文具店选购文具。签字笔 22 元一支,他需要 X 支;记事本 55 元一本,他需要 Y 本;直尺 33 元一把,他需要 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;
}

解法

用样例里的数据,替换掉题面描述中的字母,当作应用题来写出表达式,一方面验证自己的表达式是否正确,一方面方便下一步的替换。

表达式正确,那么在纸上可以计算出来和样例一样的结果,再把表达式里的字母替换回去即可。

样题使用

题目链接

小杨有 nn 元钱用于购物。商品 A 的单价是 aa 元,商品 B 的单价是 bb 元。小杨想购买相同数量的商品 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;
}