📄 1.c
字号:
#define N 3
#define M 3
#define F 1000
int issafe(int need1[N][M],int allo1[N][M],int max1[N][M],int avai1[M])
{int need[N][M],allo[N][M],max[N][M],avai[M];
int i,j,k,flag,m=0,p[M],z;
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{need[i][j]=need1[i][j];
allo[i][j]=allo1[i][j];
max[i][j]=max1[i][j];
}
avai[i]=avai1[i];
}
while(m<N)
{z=m;
for(i=0;i<N;i++)
{flag=1;
for(j=0;j<M;j++)
{if(need[i][j]>avai[j])
{flag=0;break;
}
}
if(flag==1)
{
for(j=0;j<M;j++)
{
max[i][j]=F;
need[i][j]=F;
}
for(j=0;j<N;j++) {avai[j]+=allo[i][j];}
p[m]=i; printf("p:%d-->",p[m]);
m++;
}
}
if(z==m) return 0;
}
return 1;
}
void printinit(int max[N][M],int allo[N][M],int need[N][M],int avai[M])
{int i,j;
printf("\nThe max\n");
for(i=0;i<N;i++)
{printf("p%d: ",i);
for(j=0;j<N;j++)
{
printf("%4d",max[i][j]);
}
printf("\n");
}
printf("\nThe allocation\n");
for(i=0;i<N;i++)
{printf("p%d: ",i);
for(j=0;j<N;j++)
{
printf("%4d",allo[i][j]);
}
printf("\n");
}
printf("\nThe need\n");
for(i=0;i<N;i++)
{printf("p%d: ",i);
for(j=0;j<N;j++)
{
printf("%4d",need[i][j]);
}
printf("\n");
}
printf("\nThe available\n ");
for(i=0;i<N;i++)
{printf("%4d",avai[i]);
}
}
void init(int max[N][M],int allo[N][M],int need[N][M],int avai[M])
{int i,j;
printf("\nplease input the max!");
for(i=0;i<N;i++)
{printf("\ninput the max of p:%d\n",i);
for(j=0;j<M;j++)
scanf("%d",&max[i][j]);
}
printf("\nplease input the allocation!");
for(i=0;i<N;i++)
{printf("\ninput the max of p:%d\n",i);
for(j=0;j<M;j++)
scanf("%d",&allo[i][j]);
}
printf("\nplease input the available!\n");
for(i=0;i<M;i++)
scanf("%d",&avai[i]);
for(i=0;i<N;i++)
for(j=0;j<M;j++)
need[i][j]=max[i][j]-allo[i][j];
}
main()
{
int i,j,t,d[N];
int y,e=1,repay=0;
char r;
int max[N][M]={7,5,3,3,2,2,9,0,2};
int allo[N][M]={0,1,0,2,0,0,3,0,2};
int need[N][M];
int avai[M]={5,5,2};
for(i=0;i<N;i++)
for(j=0;j<M;j++)
need[i][j]=max[i][j]-allo[i][j];
printinit(max,allo,need,avai);
printf("\nif you want to reset it please input R,or put other key to continue\n");
r=getch();
if(r=="R"||r=='r')
init(max,allo,need,avai);
for(;;)
{printinit(max,allo,need,avai);
printf("\nplese any key to check the now station\n");
getch();
if(issafe(need,allo,max,avai))
{printf("\nnow the station is safe!\n");
printf("\npealse input which pocess(0,1,2......N-1)\n");
scanf("%d",&t);
printf("pealse input the pocess want to apply resource\n");
while(e==1)
{for(i=0;i<M;i++)
scanf("%d",&d[i]);
for(i=0;i<M;i++)
if(d[i]>need[t][i])
{e=0;}
if(e==0)
{printf("\nerror!\nthe apply is exceed the need!please reset!\n");
printf("the need:") ;
for(j=0;j<M;j++)
printf("%4d",need[t][j]) ;
printf("\nbe sure unexceed the need\npealse input the pocess want to apply resource\n");
e=1;
}
else
e=0;
}
e=1;
printf("is checking now.....");
for(i=0;i<M;i++)
{need[t][i]-=d[i];
allo[t][i]+=d[i];
avai[i]-=d[i];
}
if(issafe(need,allo,max,avai))
{ for(i=0;i<M;i++)
if(need[t][i]!=0)
{repay=1;break;}
if(repay==0)
for(i=0;i<M;i++)
{avai[i]+=max[t][i];
max[t][i]=0;
allo[t][i]=0;
}
printf("\nsuccess!\n");
}
else
{printf("\nfail\n");
for(i=0;i<M;i++)
{need[t][i]+=d[i];
allo[t][i]-=d[i];
avai[i]+=d[i];
}
}
}
else
printf("\nnow the station is unsafe!\n");
printf("\nIf you want to continue,please input 1\n");
printf("If you want to exit,please input 0\ncontinue or not?[1/0]");
scanf("%d",&y);
if(y==0)
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -