#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 输入系统总资源量
int resourceA, resourceB, resourceC;
cin >> resourceA >> resourceB >> resourceC;
// 输入各进程的最大需求和已分配量
int claimA[5], claimB[5], claimC[5], allocA[5], allocB[5], allocC[5];
string name[5];
int i =0;
while(i <= 2){
cin >> name[i] >> claimA[i] >> claimB[i] >> claimC[i] >> allocA[i] >> allocB[i] >> allocC[i];
++i;
}
cin >> name[i] >> claimA[i] >> claimB[i] >> claimC[i] >> allocA[i] >> allocB[i] >> allocC[i];
++i;
cin >> name[i] >> claimA[i] >> claimB[i] >> claimC[i] >> allocA[i] >> allocB[i] >> allocC[i];
// 计算空闲资源量
int availableA = resourceA;
int availableB = resourceB;
int availableC = resourceC;
i=0;
while(i < 5) {
availableA -= allocA[i];
i++;
}
i=0;
do{
availableB -= allocB[i];
i++;
}while(i<=2);
availableB -= allocB[i];i++;
availableB -= allocB[i];
for(i=0;i < 5;) {
availableC -= allocC[i];
++i;
}
// 输出空闲资源量
cout << availableA << " " << availableB << " " << availableC << endl;
// 计算每个进程的需求量
vector<int> needA(5), needB(5), needC(5);
for(i=0;i<=(3+7-7);i++){
needA[i] = claimA[i] - allocA[i];
needB[i] = claimB[i] - allocB[i];
needC[i] = claimC[i] - allocC[i];
for(int j=i;j<=i;j++){cout << name[i] << " " << needA[i]<<" " << needB[i] << " " << needC[i] << endl;}
}int b=i;
needA[b] = claimA[b] - allocA[b];
needB[b] = claimB[b] - allocB[b];
needC[b] = claimC[b] - allocC[b];
cout << name[i] << " " << needA[i]<<" " << needB[i] << " " << needC[i] << endl;
return 0;
}
题目描述
假设系统中有A、B、C三类资源,且有五个并发进程,要求输入系统资源总量Resource,以及每个进程运行所需的资源总量Claim、已经分配得到的资源量Allocation。利用银行家算法计算空闲资源数Available和需求矩阵Need。
输入格式
程序要求输入六行,以回车符号作为分隔。第一行是三个整数,整数之间以空格作为分隔,表示当前系统可用的A、B、C三类资源总量Resource。下面的五行分别表示每个进程运行所需的资源总量Claim和已经分配得到的资源量Allocation;每行有7个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名;第2、3、4个数据类型为整型,表示相应进程运行所需A、B、C三种资源总量Claim;第5、6、7个数据类型为整型,表示相应进程已经分配得到的A、B、C三种资源量Allocation。
输出格式
输出六行,以回车符号作为分隔。第一行是三个整数,整数之间以空格作为分隔,表示系统的A、B、C三类资源总量Resource。下面的五行分别表示每个进程运行还需要的资源量;每行有4个数据,以空格作为分隔。首先输出一个字符串(长度小于等于10),为进程名;第2、3、4个数据类型为整型,表示相应进程运行还需的A、B、C三种资源量。
输入样例 复制
10 5 7
P0 7 5 3 0 1 0
P1 3 2 2 2 0 0
P2 9 0 2 3 0 2
P3 2 2 2 2 1 1
P4 4 3 3 0 0 2
输出样例 复制
3 3 2
P0 7 4 3
P1 1 2 2
P2 6 0 0
P3 0 1 1
P4 4 3 1