zoukankan      html  css  js  c++  java
  • 课堂练习——电梯调度

    题目:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
    问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
    一、设计思路
          基础大楼共有18层,则电梯可停2-18层,假设一部电梯每次最多乘20人。进入电梯之后,每人先输入要去的楼层,则程序开始计算在各楼层情况下,电梯乘客的上下楼总和,并比较大小,当取得最小值时,电梯则应该在该层停下。
    二、源代码
    //楼梯起止为2-18层,人数上限为20人
    #include<iostream.h>
    #include<math.h>
    int fl[20]={0};                   //存储各楼层有几名乘客
    int sum[20]={0};               //存储各楼层乘客上下楼总和
    int Min(int a[])                    //计算最小楼层
    {
       int min=a[2];
       int i;
       int j=2;
       for(i=3;i<=18;i++)
       {
          if(min>a[i])
          {
             min=a[i];
             j=i;
          }
       }
       return j;
    }
    int main()
    {
       int n;                                     //输入的乘客人数
       int m;                                     //判断楼层
       int i;
       int j;
       cout<<"请输入电梯人数:"<<endl;//n<=20
       cin>>n;
       cout<<"请选择要去的楼层:"<<endl;
       for(i=0;i<n;i++)
       {
          cin>>m;            //2<=m<=18
          fl[m]++;
       }
       for(i=2;i<=18;i++)
       {
          for(j=2;j<=18;j++)
          {
                        if(fl[j]==0)
                          continue;
                        else
      
     
               sum[i]=sum[i]+abs(j-i)*fl[j];
          }
       }
       cout<<"电梯应该在第"<<Min(sum)<<"层停。"<<endl;
       return 0;
    }
    三、运行结果
    四、个人总结
          这是一道优化题,并不是实现题,所以当程序实现时,我们要减少冗余运算,比如在上述程序中,当某楼层无人前往时,则计算上下楼总和时,则可以不计算该层人数。可以直接用continue语句跳过,减少毫无用处的运算。
  • 相关阅读:
    接口设计安全
    PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解
    OpenSSL使用小结
    sql的三种去重
    关于if语句&&运算符先判断空异常
    关于数据库可为null的datetime 字段
    sql server去重
    asp.net updatepanel 局部更新后调用js
    级联 -- 逻辑
    关于滑动验证的思路构思
  • 原文地址:https://www.cnblogs.com/benboerba/p/4436776.html
Copyright © 2011-2022 走看看