问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为t i ,1 £ i £ n 。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间的总和除以n。
由文件input.in给出输入数据。第一行是正整数n,表示有n个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。将编程计算出的最小平均等待时间输出到文件output.out。例如:
input.in output.out
10 291.9
56 12 1 99 1000 234 33 55 99 812
源程序代码如下:
源程序代码
1 #include <iostream> 2 #include <fstream> 3 4 using namespace std; 5 6 int main() 7 { 8 ifstream fin("f:\\zuiduandengdai\\input.in"); 9 ofstream fout("f:\\zuiduandengdai\\output.out"); 10 11 int m,temp; 12 float sub; 13 fin>>m; 14 int *p = new int[m]; 15 for (int i=0;i < m;i++) 16 fin>>p[i]; 17 //输出输入数据 18 for(int i=0;i<m;i++) 19 fout<<p[i]<<' '; 20 fout<<endl; 21 fout<<"输入数据成功"; 22 fout<<endl; 23 24 25 26 27 for(int i=0;i<m-1;i++) 28 for (int j = i+1;j<m;j++) 29 { 30 if(p[i] > p[j]) 31 { 32 temp=p[i]; 33 p[i]=p[j]; 34 p[j]=temp; 35 } 36 37 } 38 39 //输出排序后的数 40 for(int i=0;i<m;i++) 41 fout<<p[i]<<' ' ; 42 fout<<endl; 43 fout<<"输出排序后得数成功"; 44 fout<<endl; 45 46 47 48 49 int *q = new int[m]; 50 q[0]=0; 51 for (int i=1; i<m ;i++) 52 q[i]=q[i-1]+p[i-1]; 53 sub=0; 54 for(int i=0;i<m;i++) 55 sub=sub+q[i]; 56 //输出最后结果 57 float avg; 58 avg=sub/m; 59 fout<<avg<<endl; 60 fout<<"输出最短平均等待结果"<<endl; 61 62 /*sub=0; 63 for(int i=0;i<m;i++) 64 sub=sub + p[i]*(m-1-i); 65 float avg; 66 avg = sub/m; 67 fout<<sub<<endl; 68 fout<<"输出最短平均等待结果"<<endl; 69 delete p;*/ 70 71 72 delete p; 73 delete q; 74 75 fin.close(); 76 fout.close(); 77 78 return 1; 79 80 81 }
cout.setf(ios::fixed)——用定点格式显示浮点数;
cout.setf(ios::showpoint)——显示浮点数小数点后的0;
cout.precision(2)——设置精确度为2位并返回上一次的设置。