小韦老师@神犇营-my0122-药房管理

小韦老师@神犇营-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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值