【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
题目分析
解题思路
- 首先,读取输入的药品总量
m
和取药的人数n
。 - 初始化一个变量
ans
来存储没有取上药品的人数,初始值为 0。 - 使用一个循环来遍历每个病人。
- 对于每个病人,读取其希望取走的药品数量
n1
。 - 如果当前药品总量足够满足当前病人的需求(即
m - n1 >= 0
),则更新药品总量m
。 - 如果当前药品总量不足以满足当前病人的需求(即
m - n1 < 0
),则计数ans
增加,表示有一个病人没有取上药品。 - 输出计数
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 进行授权