文章

【GESP】C++一级真题练习(202309)luogu-B3863,买文具

GESP一级真题练习。为2023年9月一级认证真题。属于数值计算+条件判断的问题。

luogu-B3863

题目要求

描述

开学了,小明来到文具店选购文具。签字笔 2 元一支,他需要 X 支;记事本 5 元一本,他需要 Y 本;直尺 3 元一把,他需要 Z 把。小明手里有 Q 元钱。请你通过编程帮小明算算,他手里的钱是否够买他需要的文具。

输入

第一行包含一个正整数,是小明购买签字笔的数量。约定 1≤X≤10。
第二行包含一个正整数,是小明购买记事本的数量。约定 1≤Y≤10。
第三行包含一个正整数,是小明购买直尺的数量。约定 1≤Z≤10。
第四行包含一个正整数 Q,是小明手里的钱数(单位:元)。

输出

输出 2 行。如果小明手里的钱够买他需要的文具,则第一行输出 Yes,第二行输出小明会剩下的钱数(单位:元);否则,第一行输出 No,第二行输出小明缺少的钱数(单位:元)。

输入样例-1

1
1
1
20

输出样例-1

Yes
10

输入样例-2

1
1
1
5

输出样例-2

No
5


题目分析

这道题目主要考察简单的数学计算。需要注意以下几点:

  1. 需要计算总花费:
    • 签字笔单价2元,需要X支,花费2X元
    • 记事本单价5元,需要Y本,花费5Y元
    • 直尺单价3元,需要Z把,花费3Z元
    • 总花费 = 2X + 5Y + 3Z
  2. 判断逻辑:
    • 如果总花费小于等于Q元,则钱够用
      • 输出Yes
      • 输出剩余金额 = Q - 总花费
    • 如果总花费大于Q元,则钱不够
      • 输出No
      • 输出缺少金额 = 总花费 - Q
  3. 输入输出格式:
    • 输入4个整数X、Y、Z、Q,每个数占一行
    • 输出2行,第一行Yes/No,第二行剩余/缺少金额
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main() {
    int first, second, third, money;
    cin >> first >> second >> third >> money;
    int total_cost = first * 2 + second * 5 + third * 3;
    if (money >= total_cost) {
        cout << "Yes" << endl;
        cout << money - total_cost;
    } else {
        cout << "No" << endl;
        cout << total_cost - money;
    }
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权