7-2 作业调度算法--短作业优先 (30 分)(思路+详解+vector容器做法)Come Baby!!!!!!!!!!!
生活随笔
收集整理的這篇文章主要介紹了
7-2 作业调度算法--短作业优先 (30 分)(思路+详解+vector容器做法)Come Baby!!!!!!!!!!!
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一:題目
輸入N(N>0)個(gè)作業(yè),輸入每個(gè)作業(yè)的名字,到達(dá)時(shí)間,服務(wù)時(shí)間,按照短作業(yè)優(yōu)先算法,計(jì)算每個(gè)作業(yè)的完成時(shí)間,周轉(zhuǎn)時(shí)間,帶權(quán)周轉(zhuǎn)時(shí)間(保留2位小數(shù))。輸入格式: 第一行輸入作業(yè)數(shù)目,第二行輸入作業(yè)的名字,第三行輸入到達(dá)時(shí)間,第四行輸入服務(wù)時(shí)間。輸出格式: 按照到達(dá)時(shí)間從小到大排序,第一行輸出作業(yè)的名字,第二行輸出到達(dá)時(shí)間,第三行輸出服務(wù)時(shí)間,第四行輸出完成時(shí)間,第五行輸出完成時(shí)間,第六行輸出帶權(quán)周轉(zhuǎn)時(shí)間。輸入樣例: 在這里給出一組輸入。例如:5 A B C D E 0 1 2 3 4 4 3 1 2 4 結(jié)尾無(wú)空行 輸出樣例: 在這里給出相應(yīng)的輸出。例如:作 業(yè) 名:A B C D E 到達(dá)時(shí)間:0 1 2 3 4 服務(wù)時(shí)間:4 3 1 2 4 完成時(shí)間:4 10 5 7 14 周轉(zhuǎn)時(shí)間:4 9 3 4 10 帶權(quán)周轉(zhuǎn)時(shí)間:1.00 3.00 3.00 2.00 2.50這個(gè)測(cè)試數(shù)據(jù)可以有坑可以檢驗(yàn)兄弟們的漏洞
補(bǔ)充測(cè)試數(shù)據(jù):`
輸出結(jié)果:
作 業(yè) 名:a b c d e f 到達(dá)時(shí)間:0 4 5 6 8 10 服務(wù)時(shí)間:2 5 4 2 3 1 完成時(shí)間:2 9 19 11 15 12 周轉(zhuǎn)時(shí)間:2 5 14 5 7 2 帶權(quán)周轉(zhuǎn)時(shí)間:1.00 1.00 3.50 2.50 2.33 2.00二:思路:
思路:1.大體與先來(lái)先服務(wù)一樣
2.如果完成時(shí)間未能大于下一個(gè)的到達(dá)時(shí)間,那么還是先來(lái)先服務(wù)原則
3.如果完成時(shí)間包含后面幾個(gè)到達(dá)時(shí)間,那么就要將被包含的數(shù)據(jù) 按服務(wù)時(shí)間的遞增順序進(jìn)行處理
4.每次得到完成時(shí)間,均需更新后買面的序列
三:上碼:
/**思路:1.大體與先來(lái)先服務(wù)一樣2.如果完成時(shí)間未能大于下一個(gè)的到達(dá)時(shí)間,那么還是先來(lái)先服務(wù)原則3.如果完成時(shí)間包含后面幾個(gè)到達(dá)時(shí)間,那么就要將被包含的數(shù)據(jù) 按服務(wù)時(shí)間的遞增順序進(jìn)行處理**/#include<bits/stdc++.h> using namespace std;int N; vector<char>v1(100); vector<int>v2(100),v3(100); //v2:到達(dá)時(shí)間;v3:完成時(shí)間 vector<int>v4,v5;//v4:完成時(shí)間 v5:周轉(zhuǎn)時(shí)間 vector<double>v6;//v6:帶權(quán)周轉(zhuǎn)時(shí)間 void ans(){//計(jì)算周轉(zhuǎn)時(shí)間 = 完成時(shí)間 - 到達(dá)時(shí)間//帶權(quán)周轉(zhuǎn)時(shí)間 = (周轉(zhuǎn)時(shí)間 / 服務(wù)時(shí)間)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 << "作 業(yè) 名:"; for(int i = 0; i < N; i++){if(i == 0)cout << v1[i];else cout << ' ' << v1[i]; }cout << endl;cout << "到達(dá)時(shí)間:";for(int i = 0; i < N; i++){if(i == 0)cout << v2[i];else cout << ' ' << v2[i]; }cout << endl;cout << "服務(wù)時(shí)間:" ;for(int i = 0; i < N; i++){if(i == 0)cout << v3[i]; elsecout << ' ' << v3[i]; }cout << endl;cout << "完成時(shí)間:";for(int i = 0; i < N; i++){if(i == 0)cout << v4[i]; elsecout << ' ' << v4[i]; }cout << endl;cout << "周轉(zhuǎn)時(shí)間:";for(int i = 0; i < N; i++){if(i == 0)cout << v5[i]; elsecout << ' ' << v5[i]; }cout << endl;cout << "帶權(quán)周轉(zhuǎn)時(shí)間:";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];}//到達(dá)時(shí)間升序處理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]);} }} //這里主要是時(shí)間軸上的計(jì)算,int finish = v2[0]+v3[0];//單獨(dú)處理第一個(gè)數(shù)據(jù) v4.push_back(finish); for(int i = 1; i < N; i++){if(finish >= v2[i]){//完成時(shí)間大于等于到達(dá)時(shí)間 需要等待 int j;for(j = i; j < N; j++){ if(finish < v2[j])break; }int end = j-1;//break出去的時(shí)候已經(jīng)不滿足條件了int start = i;//按服務(wù)時(shí)間進(jìn)行排序 for(int k1 = start; k1 <= end - 1; k1++){for(int k2 = end - 1; k2 >= start; k2--){ if(v3[k2] > v3[k2+1]){swap(v3[k2],v3[k2+1]);swap(v1[k2],v1[k2+1]);swap(v2[k2],v2[k2+1]); }}} //完成時(shí)間為排完序的時(shí)間 finish += v3[start]; v4.push_back(finish); } else{finish = v2[i] + v3[i];//當(dāng)完成了,還有沒有人來(lái) v4.push_back(finish); } }//輸出到達(dá)時(shí)間升序處理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(); } //測(cè)試數(shù)據(jù) //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
加油 BOY!!!!!!!!!!!!!!! 陌生的你我們共勉
總結(jié)
以上是生活随笔為你收集整理的7-2 作业调度算法--短作业优先 (30 分)(思路+详解+vector容器做法)Come Baby!!!!!!!!!!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信和QQ如何邀请别人进群聊
- 下一篇: 7-3 作业调度算法--高响应比优先 (