描述:
一个打印店只有一个专业打字员和若干个打印实习生,专业打字员每秒钟可以打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;
}