〖編程·C++〗贪心算法 - 排队最短等待时间

 问题描述:设有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位并返回上一次的设置。

posted @ 2012-12-02 21:13  TBD  阅读(2805)  评论(0编辑  收藏  举报