• 课堂练习--电梯调度


    一、题目要求

    •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
    •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
    •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
    二、设计思想

    对于一个i层, 假设数组中比i层小的有lcount个,等于i层的有mcount个,大于i层的有rcount个。用Yi代表i与数组中每个数差的绝对值之和。有Y(i) = m;

    当i+1时,设等于i+1的数有midNext个,则此时:
     小于i+1的数有  lcount+mcount个
     大于i+1的数有 rcount-mcount个

    相比较Y(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,增加了lcount+mcount

    相比较Y(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,减少了 rcount-mcount

        Y(i+1) = Y(i) + lcount + mcount -(rcount-mcount); 
        mcount = midNext;
    三、代码实现

     1 #include "stdafx.h"
     2 #include "stdlib.h"
     3 
     4 #define MAX 1000
     5 void getFloorNo(int *input, int size)
     6 {
     7     int result[MAX] = {0};
     8     int lcount,mcount,rcount;      //分别表示小于、等于、大于第i个数
     9     int cur;
    10     int l,r;
    11     int i;
    12     l = r = 0;
    13     cur = 0;
    14     lcount = 0;
    15     rcount = size;
    16     mcount = 0;
    17     for(i = 0;i<size;i++){
    18         r+=input[i];
    19     }
    20     result[0] = r;
    21     printf("停在各楼层时爬楼梯的总和分别为:
    ");
    22     for(i=1;i<=input[size-1];i++){
    23         lcount += mcount;
    24         rcount -= mcount;
    25         r -= rcount;
    26         l += lcount;
    27         result[i] = l + r;
    28         printf ( "        %d = %d
    ",i, result[i] );
    29         mcount = 0;
    30         while(input[cur] == i){
    31             cur++;
    32             mcount++;
    33         }
    34     }
    35 }
    36 
    37  
    38 int main(void)  
    39 {  
    40     int nperson;
    41     int input[MAX];
    42     printf("进电梯的人数:");
    43     scanf("%d",&nperson);
    44     printf("请输入每个人进入电梯后按下的楼层数
    ");
    45     for(int i=0;i<nperson;i++)
    46     {
    47         scanf("%d",&input[i]);
    48     }
    49     getFloorNo(input,nperson);
    50     return 0;
    51  
    52 }  

    四、运行结果

    根据运行结果可知,电梯停靠在地5层时爬楼层数最少,为12层

    五、总结

    一开始没明白老师说的什么意思,理解为1-9层(假设)的话找到其中间层数就好了,但是题目要求要计算每个楼层每个人的爬楼梯数总和的最小值。

    后来经过老师的讲解明白了调度过程。感觉自己在编程上有待提高,思维还不够活跃。。。会继续努力的

  • 相关阅读:
    小程序事件参数传递
    java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
    SSM单元测试时出现:Failed to load ApplicationContext的一种可能解决办法
    Cannot resolve classpath entry: /Program Files/IBM/SQLLIB/java/db2java.zip
    python 批量重命名文件
    abp + vue 模板新建页面
    Git 新建版本库命令
    vi/vim 行删除操作
    abp angular 前端权限控制
    杨辉三角-python
  • 原文地址:https://www.cnblogs.com/caomeina/p/4436885.html
Copyright © 2020-2023  润新知