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

    一、题目:电梯调度

    二、要求

        1、在一楼,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层

        2、电梯停在哪一楼层,能够保证乘坐电梯的所有乘客爬楼梯的层数之和最少

    三、解题思路

         假设电梯停在i层,我们可以计算出所有乘客总共需要爬楼梯的层数Y。

      假设有N1个乘客在i层楼以下,N2个乘客在第i层楼,还有N3个乘客在第i层楼以上

      这个时候,如果电梯改停在i-1层,所有目的地在第i层及以上的乘客都需要多爬一层,即N2+N3层,而所有目的地在i-1层及以下的乘客可以少爬一层,总共可以少爬N1层。

      因此,乘客总共需要爬的层数为Y-N1+N2+N3 = Y-(N1-N2-N3)层

      反之,如果电梯在i+1层停,则总共需要爬的层数为Y+(N1+N2-N3)层。

      由此可见:

      当N1 > N2 + N3时,i-1层比i层好;

      当N1 + N2 < N3时,i+1层比i层好。

    四、程序源码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main(int argc, char* argv[])
     5 {
     6     int N = 0,i;
     7     int nPerson[100];
     8     int nMinFloor, nTargetFloor;
     9     int N1, N2, N3;
    10 
    11     cout<<"请输入总的楼层数:";
    12     
    13     while(cin>>N) //输入总的楼层
    14     {
    15         //输入到每一层的人的个数
    16         for(i = 0; i < N; ++i)
    17         {
    18             cout<<"请输入到第"<<i+1<<"层的人数:";
    19             cin >> nPerson[i];
    20             cout<<endl;
    21         }
    22 
    23         //进行状态清零
    24         nTargetFloor = 0;
    25         nMinFloor = 0;
    26 
    27         N1 = 0; 
    28         N2 = nPerson[0];
    29         N3 = 0;
    30 
    31         for (i = 1; i < N; ++i)
    32         {
    33             N3 += nPerson[i];
    34             nMinFloor += nPerson[i] * (i - 1);
    35         }
    36 
    37         for(i = 1; i < N; ++i)
    38         {
    39             if(N1 + N2 < N3)
    40             {
    41                 nTargetFloor = i;
    42                 nMinFloor +=(N1 + N2 - N3);
    43 
    44                 N1 += N2;
    45                 N2 = nPerson[i];
    46                 N3 -= N2;
    47             }
    48             else
    49             {
    50                 //否则第i层的结果已经最小,故不需要计算第i+1层 
    51                 break;
    52             }
    53         }
    54 
    55 
    56 
    57         //输出计算结果
    58         cout << "The best floor is:  " << nTargetFloor + 1 << endl;
    59 
    60     }
    61 
    62     return 0;
    63 }

    五、实验截图

    六、总结

        通过本次试验,了解和学习了电梯最优的情况和相应的算法,根据程序更加深刻的理解每一个问题,在今后学习中会对自己有很大的帮助。

  • 相关阅读:
    maven
    in 和 or 的效率问题
    mac 安装homobrew 报错解决
    卷积的本质及物理意义
    java 多线程 day18 ThreadPoolExecutor
    打jar包
    科三保佑贴
    【问题解决】-《java.lang.NoClassDefFoundException》
    POS-商户手续费-从生活剖析,通俗易懂
    关于荒废空闲时光的思考
  • 原文地址:https://www.cnblogs.com/yuji5656/p/4436583.html
Copyright © 2011-2022 走看看