文章

【GESP】C++二级练习 luogu-b2067, 药房管理

GESP二级练习,多层循环、分支语句练习,难度★✮☆☆☆。

luogu-B2067 药房管理

题目要求

题目描述

对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。

输入格式

共 $3$ 行,第一行是每天开始时的药品总量 $m$。

第二行是这一天取药的人数 $n(0<n \le 100)$。

第三行共有 $n$ 个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序)。

输出格式

只有 $1$ 行,为这一天没有取上药品的人数。

样例输入 #1

1
2
3
30
6
10 5 20 6 7 8

样例输出 #1

1
2

题目分析

解题思路

  1. 首先,读取输入的药品总量 m 和取药的人数 n
  2. 初始化一个变量 ans 来存储没有取上药品的人数,初始值为 0。
  3. 使用一个循环来遍历每个病人。
  4. 对于每个病人,读取其希望取走的药品数量 n1
  5. 如果当前药品总量足够满足当前病人的需求(即 m - n1 >= 0),则更新药品总量 m
  6. 如果当前药品总量不足以满足当前病人的需求(即 m - n1 < 0),则计数 ans 增加,表示有一个病人没有取上药品。
  7. 输出计数 ans,即没有取上药品的人数。


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main() {
    int m, n, ans = 0; // 定义变量m、n和ans,初始化ans为0
    cin >> m >> n; // 读取输入的m和n
    int n1; // 定义变量n1
    for (int i = 1; i <= n; i++) { // 遍历每个病人
        cin >> n1; // 读取当前病人希望取走的药品数量
        if (m - n1 >= 0) { // 如果当前药品总量足够满足当前病人的需求
            m -= n1; // 更新药品总量
        } else { // 如果当前药品总量不足以满足当前病人的需求
            ans++; // 计数增加,表示有一个病人没有取上药品
        }
    }
    cout << ans; // 输出没有取上药品的人数
    return 0;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

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

bcqm-”系列题目可在编程启蒙题库进行在线评测。

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