银行计算法

#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
int Available[10]; 
int Claim[10][10];   
int Allocation[10][10]; 
int Need[10][10];        
int Request[10][10];  
char P[10];    
int m,n,k;
void safe(){
    int work[50],i,j,k,h=0;
    char rest[10];
    int flag=0;
    int Finish[10];
    for(i=0;i<n;i++)
        work[i]=Available[i];
    for(i=0;i<m;i++){
        Finish[i]=false;
        rest[i]=P[i];    
    }
    for(i=0;i<m;i++){
        if(Finish[i]==true) continue;
        else{
            for(j=0;j<n;j++)
                 if (Need[i][j]>work[j])
                    break;    
            if(j==n){
                for(k=0;k<n;k++){
                    work[k]=work[k]+Allocation[i][k];
                }
                Finish[i]=true;
                rest[h++]=P[i];
                switch(i){
                    case 0: continue;
                    case 1:case 2:case 3:case 4: i=-1;                        
                }        
            }
            else continue;                
        }
    }
    if(h==m) flag=1;
    if(flag==0)
        printf("系统处于不安全\n");            
    else{
        printf("系统处于安全\n");
        for (i=0;i<h;i++)
            {
                printf("%c",rest[i]);
                if (i!=h-1)
                   printf("-->");;
            }
            printf("\n");
        }

}    

void main(){
    int i,j;
    printf("请输入进程数\n");
    scanf("%d",&m);
    printf("请输入资源数\n");
    scanf("%d",&n);
    printf("请输入进程的种类\n");
    getchar();
    for(i=0;i<m;i++){    
        scanf("%c",&P[i]);    
    }
    printf("请输入每类进程对各类资源的最大需求\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++){
            scanf("%d",&Claim[i][j]);
        }    
    printf("请输入可用的资源数\n");
    for(i=0;i<n;i++){
        scanf("%d",&Available[i]);    
    }
    printf("请输入每类进程对各类资源的占有数即给每类进程分配资源\n");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++){
            scanf("%d",&Allocation[i][j]);    
            Need[i][j]=Claim[i][j]-Allocation[i][j];
            if(Need[i][j]<0){
                printf("%d号进程分配的%d类资源过大,请重新输入\n",i,j);
                j--;
                continue;
        }    
    }    
        safe();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值