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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

7-3 作业调度算法--高响应比优先 (40 分)(思路+详解+vector容器做法)Come Baby!!!!!

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-3 作业调度算法--高响应比优先 (40 分)(思路+详解+vector容器做法)Come Baby!!!!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:題目

輸入N(N>0)個作業,輸入每個作業的名字,到達時間,服務時間,按照高響應比優先算法,計算每個作業的完成時間,周轉時間,帶權周轉時間(保留2位小數)。

輸入格式:
第一行輸入作業數目,第二行輸入作業的名字,第三行輸入到達時間,第四行輸入服務時間。

輸出格式:
按照到達時間從小到大排序,第一行輸出作業的名字,第二行輸出到達時間,第三行輸出服務時間,第四行輸出完成時間,第五行輸出完成時間,第六行輸出帶權周轉時間。

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

5 A B C D E 0 1 2 3 4 4 3 4 2 4

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

作 業 名:A B C D E 到達時間:0 1 2 3 4 服務時間:4 3 4 2 4 完成時間:4 7 13 9 17 周轉時間:4 6 11 6 13 帶權周轉時間:1.00 2.00 2.75 3.00 3.25

二:思路

思路:1.響應比=(等待時間+服務時間)/服務時間
2.響應比越大,優先級越高
3.當完成時間小于后面的進程到達時間的時候,那么還是先來先服務
4.當完成時間大于后面進程的到達時間的時候,我們要根據響應比的大小
進行排序相應比大的先進行

三:上碼

/**思路:1.響應比=(等待時間+服務時間)/服務時間2.響應比越大,優先級越高 3.當完成時間小于后面的進程到達時間的時候,那么還是先來先服務4.當完成時間大于后面進程的到達時間的時候,我們要根據響應比的大小進行排序相應比大的先進行 */ #include<bits/stdc++.h> using namespace std;int N; vector<char>v1(100); vector<int>v2(100),v3(100); //v2:到達時間;v3:完成時間 vector<int>v4,v5;//v4:完成時間 v5:周轉時間 vector<double>v6;//v6:帶權周轉時間 void ans(){//計算周轉時間 = 完成時間 - 到達時間//帶權周轉時間 = (周轉時間 / 服務時間)for(int i = 0; i < N; i++){int Turnaround_time = 0;double loat_Wi = 0;Turnaround_time = v4[i] - v2[i];v5.push_back(Turnaround_time);loat_Wi = (double)Turnaround_time / v3[i];v6.push_back(loat_Wi); } cout << "作 業 名:"; for(int i = 0; i < N; i++){if(i == 0)cout << v1[i];else cout << ' ' << v1[i]; }cout << endl;cout << "到達時間:";for(int i = 0; i < N; i++){if(i == 0)cout << v2[i];else cout << ' ' << v2[i]; }cout << endl;cout << "服務時間:" ;for(int i = 0; i < N; i++){if(i == 0)cout << v3[i]; elsecout << ' ' << v3[i]; }cout << endl;cout << "完成時間:";for(int i = 0; i < N; i++){if(i == 0)cout << v4[i]; elsecout << ' ' << v4[i]; }cout << endl;cout << "周轉時間:";for(int i = 0; i < N; i++){if(i == 0)cout << v5[i]; elsecout << ' ' << v5[i]; }cout << endl;cout << "帶權周轉時間:";for(int i = 0; i < N; i++){if(i == 0)printf("%.2lf",v6[i]); elseprintf(" %.2lf",v6[i]);} } int main(){cin >> N;for(int i = 0; i < N; i++){cin >> v1[i]; }for(int i = 0; i < N; i++){cin >> v2[i];}for(int i = 0; i < N; i++){cin >> v3[i];}//到達時間升序處理for(int i = 0; i < N-1; i++){for(int j = N-2; j >= 0; j--){if(v2[j] > v2[j+1]){swap(v2[j],v2[j+1]);swap(v1[j],v1[j+1]);swap(v3[j],v3[j+1]);} }} //這里主要是時間軸上的計算,int finish = v2[0]+v3[0];//單獨處理第一個數據 v4.push_back(finish); for(int i = 1; i < N; i++){if(finish >= v2[i]){//完成時間大于等于到達時間 需要等待 int j;for(j = i; j < N; j++){ if(finish < v2[j])break; }int end = j-1;//break出去的時候已經不滿足條件了int start = i;//求取響應比vector<double> vx(1000);for(int k = start; k <= end; k++){int wait = finish - v2[k];double response = (double)(wait +v3[k])/v3[k];vx[k] = response;//注意這里不能能用push_back(); }//按響應比進行排序 for(int k1 = start; k1 <= end - 1; k1++){for(int k2 = end - 1; k2 >= start; k2--){ if(vx[k2] < vx[k2+1]){swap(vx[k2],vx[k2+1]);swap(v3[k2],v3[k2+1]);swap(v1[k2],v1[k2+1]);swap(v2[k2],v2[k2+1]); }}} //完成時間為排完序后的時間 finish += v3[start]; v4.push_back(finish); } else{finish = v2[i] + v3[i];//當完成了,還有沒有人來 v4.push_back(finish); } }//輸出到達時間升序處理for(int i = 0; i < N-1; i++){for(int j = N-2; j >= 0; j--){if(v2[j] > v2[j+1]){swap(v2[j],v2[j+1]);swap(v1[j],v1[j+1]);swap(v3[j],v3[j+1]);swap(v4[j],v4[j+1]); } }} ans(); } //測試數據 //5 //A B C D E //0 1 2 4 4 //4 3 4 2 4//5 //A B C D E //2 1 2 3 15 //4 3 4 2 4//5 //A B C D E //2 1 10 3 4 //4 3 4 2 4//5 //A B C D E //0 5 2 3 4 //4 3 4 2 4//5 //D B C A E //6 5 2 3 4 //4 3 4 2 4//6 //a b c d e f //0 4 5 6 8 10 //2 5 4 2 3 1


最近聽到一句很好的話送給陌生的你:當你覺得你很厲害的時候,你的進步也就停止了。這是韓順平老師說的,很有道理,無論何時,保持歸零的心態,慢慢進步吧,我們共勉!!!!!!!!!!!!!

總結

以上是生活随笔為你收集整理的7-3 作业调度算法--高响应比优先 (40 分)(思路+详解+vector容器做法)Come Baby!!!!!的全部內容,希望文章能夠幫你解決所遇到的問題。

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