问题 F: 死锁—利用银行家算法计算空闲资源数和需求矩阵

#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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇治小抹茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值