日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-3 银行家算法--综合 (50 分)(思路+详解+分析输入)宝宝们 加油

發布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-3 银行家算法--综合 (50 分)(思路+详解+分析输入)宝宝们 加油 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:前言

這道題涉及到 銀行家算法的申請資源 算法 還有 安全性檢查的耍算法 那么強烈建議 把前面的學完再看本題
7-1 銀行家算法–安全性檢查 (20 分)
7-2 銀行家算法–申請資源 (30 分)

二:題目

輸入N個進程(N<=100),以及M類資源(M<=100),初始化各種資源的總數,T0時刻資源的分配情況。例如: 假定系統中有5個進程{P0,P1,P2,P3,P4}和三類資源{A,B,C},各種資源的數量分別為10、5、7,在T0時刻的資源分配

根據菜單選擇相應操作:

1.初始化:第一行輸入進程數量N,第二行輸入資源類數M,第三行輸入M類資源個類資源的總數,以下N行分別輸入每個進程的名字,該進程對M類資源的最大需求以及已分配資源。

2.安全性檢查:判斷當前系統是否處于安全狀態,若安全,輸出“找到安全序列,處于安全狀態。”否則,輸出“找不到安全序列,處于不安全狀態。”

3.申請資源:輸入申請進程的名字和申請各類資源的數目。 若分配,輸出”可以找到安全序列,可以分配。“若不分配,給出不分配的原因:

(1).若輸入的進程的名字不正確,輸出“查無此進程。”

(2).若申請的資源數目大于最大需求,輸出“需求不合理,不予分配。”

(3).若申請的資源數目大于剩余資源,輸出“剩余資源不足,不予分配。”

(4).若找不到安全序列,輸出“找不到安全序列,不予分配。”
4.當前資源分配情況:按照格式輸出當前資源分配情況,包括進程名稱、最大需求、已獲得資源、可利用資源向量。例如T0時刻,當前的資源分配情況如下:

輸入格式:
先顯示菜單(只顯示一次),然后按照需求進行選擇:

輸出格式:
按照選擇,輸出相應數據。

輸入樣例1:
在這里給出一組輸入。例如:

1 5 3 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 2 0 0 2 2 0 結尾無空行

輸出樣例1:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 找到安全序列,處于安全狀態。

結尾無空行
輸入樣例2:
在這里給出一組輸入。例如:

1 5 3 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 2 0 0 2 2 4 0 結尾無空行

輸出樣例2:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 找到安全序列,處于安全狀態。 name max allocation need available P0 7 5 3 | 0 1 0 | 7 4 3 | 3 3 2 P1 3 2 2 | 2 0 0 | 1 2 2 | P2 9 0 2 | 3 0 2 | 6 0 0 | P3 2 2 2 | 2 1 1 | 0 1 1 | P4 4 3 2 | 0 0 2 | 4 3 0 | 結尾無空行

輸入樣例3:
在這里給出一組輸入。例如:

1 5 3 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 2 0 0 2 3 P1 1 0 2 0 結尾無空行

輸出樣例3:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 可以找到安全序列,可以分配。

結尾無空行
輸入樣例4:
在這里給出一組輸入。例如:

1 5 3 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 2 0 0 2 3 P6 1 0 2 0 結尾無空行

輸出樣例4:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 查無此進程。 結尾無空行 輸入樣例5:

在這里給出一組輸入。例如:

1 5 3 10 5 7 P0 7 5 3 0 1 0 P1 3 2 2 3 0 2 P2 9 0 2 3 0 2 P3 2 2 2 2 1 1 P4 4 3 2 0 0 2 3 P4 3 3 0 0 結尾無空行

輸出樣例5:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 剩余資源不足,不予分配。 結尾無空行

輸入樣例6:
在這里給出一組輸入。例如:

1

5 3 10 5 7 P0 7 5 3 0 1 0 P1 3 2 2 3 0 2 P2 9 0 2 3 0 2 P3 2 2 2 2 1 1 P4 4 3 2 0 0 2 3 P0 0 2 0 0 結尾無空行

輸出樣例6:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 找不到安全序列,不予分配。 結尾無空行

輸入樣例7:
在這里給出一組輸入。例如:

1 5 3 10 5 7 P0 7 5 3 0 1 0 P1 3 2 2 3 0 2 P2 9 0 2 3 0 2 P3 2 2 2 2 1 1 P4 4 3 2 0 0 2 3 P1 2 2 0 0

結尾無空行
輸出樣例7:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 需求不合理,不予分配。 結尾無空行

輸入樣例8:
在這里給出一組輸入。例如:

1 5 3 10 5 7 P0 7 5 3 0 1 0 P1 3 2 2 3 0 2 P2 9 0 2 3 0 2 P3 2 2 2 2 1 1 P4 4 3 2 0 0 2 9 0 結尾無空行

輸出樣例8:
在這里給出相應的輸出。例如:

****************** 1.初始化 2.安全性檢查 3.請求資源 4.當前資源分配情況 0.退出 ****************** 請選擇: 輸入錯誤,請重新輸入! 結尾無空行

二:輸入格式

1.

可能乖寶寶們想不出 這個題是如何輸入的 又是如何實現各個功能的,其實就是發送一個請求 實現一個功能

2.接下來直接看貼心杰的演示用例

(1):這就是剛開始的狀態(只出現一次)

(2):這是輸入的選項1 實現的輸入數據的功能

(3):這是輸入了選項2 實現了檢查當前系統是否是在安全狀態下

(4):這是是實現了功能4 展現了各個階段的的進程狀態

三:思路

思路:1.我覺得你如果把前兩道題做出來這道題就沒那么難了
2.分析我們的寫碼思路
1>:根據示例我們能很輕松的知道這是標準的 菜單欄的功能選擇
即你輸入 1 就是讓你輸入 輸入數據,輸入其他選項就是實現其他功能
根據我們的示例 我們會發現每次都是先輸入1因為那是要實現輸入數據 功能
然后輸完數據后 就可以 來進行其他功能

四:寫碼思路

就是先將整個框架建好,然后再挨個實現各個功能

五:DeBug方法

本題中我在解決好幾個bug,不光光是拿上方的測試直接來用,而是輸入一個用例后 我并沒有 按示例當中的輸入0直接退出 而是繼續輸入數據 這樣解決的我好幾個漏洞!所以貼心杰 在這里 仿佛把啥都想分享受給乖寶寶們,恨不得面對面解決你的疑問,平時也沒人問,做出來也就分享給屏幕前的你了,這樣我也很開心呀!!

六:來干了這杯代碼

/**思路:1.我覺得你如果把前兩道題做出來這道題就沒那么難了2.分析我們的寫碼思路1>:根據示例我們能很輕松的知道這是標準的 菜單欄的功能選擇即你輸入 1 就是讓你輸入 輸入數據,輸入其他選項就是實現其他功能根據我們的示例 我們會發現每次都是先輸入1因為那是要實現輸入數據 功能然后輸完數據后 就可以 來進行其他功能 */#include<bits/stdc++.h> using namespace std;int N,M; string str; vector<int>v1;//用于存放各種的資源總量 vector<int>v2;//用于代表申請資源的進程申請的 資源量 vector<int>v3;//用于記錄最初的avaliable struct Node{string processName; int a[10000];//Maxint b[10000];//allocation int c[10000];//needbool finish; } node[10000];//1.初始化輸入功能 void cinFunction(){cin >> N >> M;for(int i = 0; i < M; i++){int nums;cin >> nums;v1.push_back(nums); } for(int i = 0; i < N; i++){cin >> node[i].processName;//輸入Max for(int j = 0; j < M; j++){cin >> node[i].a[j]; }//輸入allovation for(int j = 0; j < M; j++){cin >> node[i].b[j];v1[j] -= node[i].b[j];//這里是每次減去分配的資源 那么剩下的最后就是 available }//計算needfor(int j = 0; j < M; j++){node[i].c[j] = node[i].a[j] - node[i].b[j];} } //將最初的avaliable記錄下來 for(int i = 0; i < M; i++){v3.push_back(v1[i]);} }//用于判斷是否有該進程 bool judgeExit(string str){for(int i = 0; i < N; i++){if(str == node[i].processName){return true;}}return false; }//用于計算此時的request 和 need bool requestNeed(){int count = 0;for(int i = 0; i < N; i++){if(str == node[i].processName){for(int j = 0; j < M; j++){if(v2[j] <= node[i].c[j]){//請求量 小于 need count++;}} }if(count == M){return true;}}return false;} //用判斷申請的資源數目是否大于剩余資源 bool requestAvaliable(){int count = 0;for(int j = 0; j < M; j++){if(v2[j] <= v1[j]){ //請求量 小于 avaliabale count++;}} if(count == M){return true;}return false;}//2.安全性檢查 bool isSafe(){//注意每次進行安全的檢查 都需要更新finish = false 否則 下一次再檢查 finish 都等于 true了 for(int i = 0; i < N; i++){node[i].finish = false;}int cnt = 0; for(int i = 0; i < N; i++){int count = 0;for(int j = 0; j < M; j++){if(node[i].c[j] <= v1[j]){count++;}else{break;//只要有一個不合適就 break 出去 } }if(node[i].finish == false && count == M) {//count == M說明剩余的各個資源總量大于該進程的所需要的 for(int j = 0; j < M; j++){v1[j] += node[i].b[j];//那么此時剩余的資源總量為原來的加上 該進程釋放其占有的資源} node[i].finish = true; cnt++;//記錄完成進程的個數 // cout << node[i].processName << ' ';//此處牛逼之處在于 只要我們找到滿足條件的就從-1開始繼續尋找滿足條件的 i = -1; } }if(cnt == N){return true;}return false; } //進行一次 安全性檢查 就需要 將 檢查前的數據還原回去 否則當你進行了兩次安全性檢查 // 那么第一次結果正確 那么第二次的時候 此時的avaliable已經是全滿狀態void toFormer(){for(int i = 0; i < M; i++){v1[i] = v3[i];} } //3.申請資源 void apply_Resources(){cin >> str;for(int i = 0; i < M; i++){int temp;cin >> temp;v2.push_back(temp);}if(judgeExit(str) == false){cout << "查無此進程。" << endl;//state();}else if(requestNeed() == false){cout << "需求不合理,不予分配。" << endl;// state();}else if(requestAvaliable() == false) {cout << "剩余資源不足,不予分配。" << endl;// state();}//此時開始將申請的資源賦值給該進程同時進行安全檢測 else if(judgeExit(str) == true && requestNeed() == true && requestAvaliable() == true){for(int i = 0; i < N; i++){if(str == node[i].processName){for(int j = 0; j < M; j++){node[i].b[j] += v2[j];//這里是更新 該進程的allocation node[i].c[j] -= v2[j];//這里是更新 該進程的needv1[j] -= v2[j]; //這里是更新 該進程的avaliable v3[j] -= v2[j];//存放 最初 avaliable的 }} } if(isSafe() == true){cout << "可以找到安全序列,可以分配。" << endl;toFormer();//只要一進行安全性檢查 就需要將avaliable 還原回去 // state();}else{cout << "找不到安全序列,不予分配。" << endl;toFormer();//只要一進行安全性檢查 就需要將avaliable 還原回去 //如果不滿足條件的話 需要將原來 進程的的資源分配形式輸出來 for(int i = 0; i < N; i++){if(str == node[i].processName){for(int j = 0; j < M; j++){node[i].b[j] -= v2[j];//這里是更新 該進程的allocation node[i].c[j] += v2[j];//這里是更新 該進程的needv1[j] += v2[j]; //這里是更新 該進程的avaliable v3[j] += v2[j];//存放 最初 avaliable的 }} } // state();} } //注意每次都要清理這個vector容器 因為 當你下一次再往里裝數據時 他不是從下標為0的//地方裝的,而是從你上次填裝的截至為止開始的 v2.clear(); }//4.當前的資源情況 void state(){int flag = 0;cout << "name max allocation need available" << endl;for(int i = 0; i < N; i++){cout << node[i].processName << ' ';for(int j = 0; j < M; j++){cout << node[i].a[j] << ' '; } cout << "| ";for(int j = 0; j < M; j++){cout << node[i].b[j] << ' '; }cout << "| ";for(int j = 0; j < M; j++){cout << node[i].c[j] << ' '; }cout << "|";if(flag == 0){for(int j = 0; j < M; j++){if(j == 0)cout << ' ' <<v3[j];elsecout << ' ' <<v3[j] ; } flag = 1; } cout << endl; } }void init(){cout << "******************" << endl;cout << "1.初始化" << endl;cout << "2.安全性檢查" << endl;cout << "3.請求資源" << endl;cout << "4.當前資源分配情況" << endl;cout << "0.退出" << endl;cout << "******************" << endl;cout << "請選擇:" << endl ; }int main(){int option;bool flag = false;init(); while(flag == false){cin >> option;switch(option){case 1: cinFunction();break;case 2:if(isSafe() == true){cout << "找到安全序列,處于安全狀態。" << endl;toFormer();//只要一進行安全性檢查 就需要將avaliable 還原回去 } else{cout << "找不到安全序列,處于不安全狀態。" << endl;toFormer();//只要一進行安全性檢查 就需要將avaliable 還原回去 }break;case 3:apply_Resources();break; case 4:state(); break;case 0:flag = true;break; default:cout << "輸入錯誤,請重新輸入!" << endl; }}}//1 //5 //3 //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 2 0 0 2 //3 //P1 1 0 2 //0 //1 //5 //3 //10 5 7 //P0 7 5 3 0 1 0 //P1 3 2 2 3 0 2 //P2 9 0 2 3 0 2 //P3 2 2 2 2 1 1 //P4 4 3 2 0 0 2 //3 //P0 0 2 0 //0 // // // //1 //5 //3 //10 5 7 //P0 7 5 3 0 1 0 //P1 3 2 2 3 0 2 //P2 9 0 2 3 0 2 //P3 2 2 2 2 1 1 //P4 4 3 2 0 0 2 //3 //P1 2 2 0 //0


再嘮叨一句 加油 寶寶們 有疑問記得留言呀 留言呀 我碼不停地的趕到 加油 我們共同進步

總結

以上是生活随笔為你收集整理的7-3 银行家算法--综合 (50 分)(思路+详解+分析输入)宝宝们 加油的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区欧美日韩 | 91喷水视频| 久久久一 | 初尝情欲h名器av | 亚洲免费人成 | 2021久久| 免费成人福利视频 | 在线一区av| 一级伦理片 | 久久五月天婷婷 | 日本大片黄 | 在线观看网站黄 | 97伦伦午夜电影理伦片 | 日批免费观看 | 国产精品国产馆在线真实露脸 | 影音先锋91 | 六月激情| 伊人久久青青 | 日本高清www | 国产精品自拍在线观看 | 在线观看久草 | 黄色小说在线看 | 色吊丝一区二区 | 久久91亚洲人成电影网站 | 性xxxx另类xxⅹ | 国产欧美亚洲一区二区 | 亚洲图片欧美另类 | 国产精品一区二区免费视频 | 亚洲精选免费 | 亚洲国产精华液网站w | 成年视频在线 | 国产精品视频一区二区三区在3 | 成人精品视频在线观看 | 中文在线观看免费网站 | 国产小视频在线免费观看 | 97精品一区二区视频在线观看 | 99riav1国产精品视频 | 91免费视频网 | 91春色| wwwxxxx日本 | 天天草夜夜操 | 天天爽天天插 | 中文字幕av播放 | 国产第一福利 | 色婷婷av一区二区 | 综合精品一区 | 爱露出| 男人午夜网站 | av电影网站在线观看 | 女人18毛片水真多18精品 | 国产嫩草av | 77久久| 亚洲av人无码激艳猛片服务器 | 日韩精品一区二区三区国语自制 | 韩国日本美国免费毛片 | 看片久久| 熟女视频一区 | 国产欧美a | 国产一区一区 | 成人免费观看视频网站 | 丁香花高清在线 | 精品国产一区二区三区四区 | 火影黄动漫免费网站 | 成人手机看片 | 一级特毛片 | 亚洲精选一区二区 | 久久乐视频 | 美女让男人捅 | 午夜免费网址 | 天堂在线 | 777亚洲| 人操人人 | 亚洲第一av网站 | 国产6区| 欧美极品少妇xxxxⅹ猛交 | 可以免费看的毛片 | 日韩免费电影一区 | 操她视频网站 | 亚洲精品久久久久久国产精华液 | 草草视频在线 | 99热这里只有精品8 国产一卡二 | 国产精品资源 | 情侣自拍av | 香港三日本8a三级少妇三级99 | 麻豆国产网站 | 久久精品无码一区二区三区 | 成年免费视频黄网站在线观看 | 久久精品导航 | 日韩av片在线播放 | 日韩欧美中字 | 五月天小说网 | ww成人 | 欧美成人精品一区二区男人看 | 久久一卡二卡 | 色哟哟网站在线观看 | 在线免费毛片 | www.香蕉.com| 精品成人在线观看 | 成年人网站在线观看视频 |