• 〖編程·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位并返回上一次的设置。

  • 相关阅读:
    2013年春季献礼 微软认证考试5.5折优惠,截止到5月25日
    邮件服务器脱离域灾难恢复
    How to: Hide the Ribbon in SharePoint 2010
    sharepoint2010如何根据用户登录名获取有权限的列表记录?
    sharepoint 2010的版本比较
    SharePoint2010文档归档策略(2)从放置库转移到自己定义的文档库
    如何设置sharepoint的栏目不在新增或修改页面显示?
    如何删除 SharePoint Workspace 2010 中的临时数据和永久数据
    Windows XP 默认蓝色桌面的 RGB
    System.Net.Socket Tcp 学习笔记(一)
  • 原文地址:https://www.cnblogs.com/shaoweinan/p/2798664.html
Copyright © 2020-2023  润新知