1259 分時系統

來源:互聯網
上載者:User
 
描述

在一個分時系統中,調度進程是最令CPU頭疼的一個問題。現在有n個等待執行的進程,每個進程的執行時間為Ti,請你協助CPU決定進程執行的順序,使這n個進程的最短等待時間最小。(此系統中的CPU調度是不可中斷調度,即一旦決定執行一個進程,就要把一個進程執行完)。
平均等待時間:就緒隊列中等待所花時間之和除以進程總數。比如,有三個進程,A,B,C分別需要2ms,3ms和1ms。如果按照ABC的順序調度則A需要等待0ms,B需要等待2ms,C需要等待5ms。此時的平均等待時間為 (0+2+5)/3。如果按照BAC的順序調度 則B需要等待0ms,A需要等待3ms,C需要等待5ms,此時的平均等待時間為 (0+3+5)/3。

輸入

有2n+1行,第一行為一個int值,表示下面有n組測試資料。
下面一共有2n行,每組測試數組有兩行:
第一行為m(m<100),表示一共有m個需要調度的進程;
第二行有m個整數,分別表示每個進程完成需要的毫秒數[tex]T_1[/tex],[tex]T_2[/tex],……,[tex]T_m[/tex] ([tex]T_i[/tex]<1000)。

輸出

對於每組測試資料輸出兩行:
第一行為一種調度順序,即1到m的一種排列(若兩個進程的完成時間相同,則按它們編號從小到大的順序輸出);
第二行為這種調度方案下的平均等待時間(輸出結果精確到小數點後兩位)。

範例輸入
11056 12 1 99 1000 234 33 55 99 812
範例輸出
3 2 7 8 1 4 9 6 10 5291.90

 

 

此題是明顯的貪心

#include<stdio.h>main(){ int i,t,j,k;int a[101];int b[101];int c[101];int temp;int te,number;int temper;double sum;scanf("%d",&number);for (te=1;te<=number;te++){  scanf("%d",&temper);for(i=0;i<101;i++)a[i]=0;k=0;sum=0;for(i=0;i<temper;i++){ scanf("%d",&a[i]);b[k++]=a[i];   }for(i=0;i<temper;i++)   for(j=i+1;j<temper;j++)   {         if(a[i]>a[j])       {     temp=a[j];    a[j]=a[i];    a[i]=temp;         }     }for(k=0;k<temper;k++){for(j=0;j<temper;j++)if(b[j]==a[k]){c[k]=j+1;b[j]=-1;j=0;break;}}for(i=0;i<temper-1;i++)printf("%d ",c[i]);printf("%d\n",c[temper-1]);for(j=0;j<temper-1;j++){    for(i=0;i<=j;i++)sum+=a[i];}printf("%.2lf\n",sum/temper);}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.