小韦老师@神犇营-my0122-药房管理
题目:
描述
随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。
对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。
输入
输入共 3 行, 第一行是每天开始时的药品总量 m(20 ≤ m ≤ 500)。
第二行是这一天取药的人数 n(0 < n ≤ 100)。
第三行共有 n 个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序),每两个数用一个空格隔开。
输出
只有 1 行,为这一天没有取上药品的人数。
输入样例1
30
6
10 5 20 6 7 8
输出样例1
2
思路:
整体思路:
对于 n 个人,从第 1 个人开始,若第 1 个人的药品需求数小于等于当前
所剩的药品数,则可以将药取走,并且所剩药品数要减去被取走的数量。
第 2 个人也是一样,若第 2 个人的药品需求数小于等于当前所剩的药品数,
则可以将药取走,并且所剩药品数要减去被取走的数量。
以此类推。
所以要维持一个当前药品剩余量,然后和目前的人所需的药品量做比较,若
能取走药品,则将所剩药品数更新(减去取走的量),否则没有取到药的人数
加 1 即可。
具体步骤:
1.定义两个变量,用来接收药品总量,取药人数,并将这两个变量输入:
int m, n; // 药品总量,取药人数
cin >> m >> n;
2.定义一个变量,用来接收每个人的所需要的药品数:
int request; // 用来接收需要的药品数
3.定义一个变量,用来记录未取到药的人数(计数器),并初始化为 0:
int ans = 0; // 未取到药的人数
4.对于 n 个人,做 n 次操作:
1)输入当前的人所需药品数
2)如果当前这个人所需药品数小于等于所剩药品数,则所剩药品数减去
这个所需药品数(相等与取走了这么多);否则未取到药的人数加 1。
for (int i = 0; i < n; i++) { // 做 n 次操作
cin >> request; // 输入需要的药品数
if (request <= m) { // 若所需药品数小于等于所剩药品数
m -= request; // 所剩药品数减去被取走的药品数(刚刚输入的所需药品数)
}
else ans++; // 若所需药品数大于所剩药品数,则未取到药的人数加 1
}
5.输出未取到药的人数。
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int m, n; // 药品总量,取药人数
cin >> m >> n;
int request; // 用来接收需要的药品数
int ans = 0; // 未取到药的人数
for (int i = 0; i < n; i++) { // 做 n 次操作
cin >> request; // 输入需要的药品数
if (request <= m) { // 若所需药品数小于等于所剩药品数
m -= request; // 所剩药品数减去被取走的药品数(刚刚输入的所需药品数)
}
else ans++; // 若所需药品数大于所剩药品数,则未取到药的人数加 1
}
// 输出未取到药的人数
cout << ans;
return 0;
}