ACM-001-打字任务

描述:
一个打印店只有一个专业打字员和若干个打印实习生,专业打字员每秒钟可以打m个字,实习生每秒钟只能打1个字。现打印店接到n个任务,要求由n个实习生和那唯一的一个专业打字员共同完成,专业打字员可以随时帮助其中任何一个实习生打字(专业人员帮助某实习生时,该实习生只能站看旁边观看,不能两个人同时打一个文档,专业打字员单位时间以秒计算,即便剩余字数时间不足1秒,也计算为用时1秒)。 请问全部完成这批打字任务最短需要多长的时间。
输入
第一行输入打印任务的数量n;
第二行输入n+1个数;
前n个数为每个任务的文字数量,最后一个数m,为专业打字员的速度(即每秒钟打m个字)
示例:
在这里插入图片描述
我的解决:

#include <iostream>
using namespace std;

int Mun = 0;//打印数量
int Speed = 0;//专业打字员速度
int *list = NULL;//打印任务数组
int time = 0;//计数

int main() {
	cout << "请输入打印任务数量" << endl;
	cin >> Mun;
	int list_size;
	list = new int[Mun];

	//输入数据
	for (int i = 0; i < Mun; i++) {
		cin >> list[i];
	}
	cin >> Speed;

	cout << endl;

	//验证。。。
	/*for (int i = 0; i < Mun; i++) {
		cout << list[i];
	}*/
	int pro_running = 999;//中间变量,记录要被专业运行的任务下标

	while (list != NULL)
	{
		pro_running = 999;
		int MaxTesk = 0;
		int MaxTaskPnt = 0;
		//记录最大的任务
		MaxTesk = list[0];
		//先找大于专业的任务
		for (int j = 0; j < Mun; j++) {
			MaxTaskPnt = j;
			if (MaxTesk < list[j]) {
				MaxTesk = list[j];
			}

			//找到了
			if (list[j] > Speed) {
				pro_running = j;
				break;
			}
		}
		//记录
		if (pro_running == 999) {
			pro_running = MaxTesk;
		}
		//执行当前时刻的打印任务   MaxTaskPnt--被帮助的下标
		for (int k = 0; k < Mun; k++) {
			//被帮助的任务
			if (MaxTaskPnt == k) {
				//如果当前任务小于专业人员的速度直接为0
				if (list[k] - Speed < 0) {
					list[k] = 0;
				}
				else {
					list[k] -= Speed;
				}
			}
			//没被帮助的任务
			else {
				if (list[k] - 1 < 0) {
					list[k] = 0;
				}
				else {
					list[k]--;
				}
			}
		}

		//检测任务是否全部完成
		for (int h = 0; h < Mun; h++)
		{
			if (list[h] != 0) {
				break;
			}
			if (h == Mun - 1) {
				list = NULL;
			}
		}
		time++;

	}
	//cout << endl;
	cout << time << endl;

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值