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

    一、题目要求

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

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

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

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

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

        Y(i+1) = Y(i) +LNum+ ENum -(BNum-ENum); 
        ENum= midNext;
    三、源代码

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

    四、运行结果截图

    五、心得体会

    上课时听的糊里糊涂的,课下又和同学们交流,查资料才大致有些明白,我们要自己去寻找简便方法,提高自己的能力。

  • 相关阅读:
    mysql修改加密方式
    信息安全学习路线
    DNS域传送漏洞
    CSRF漏洞
    反序列化漏洞
    计算机通讯基础
    gorm gen使用
    golang makefile使用
    linux命令行录制
    go代码自动生成注释
  • 原文地址:https://www.cnblogs.com/yuanyajiao/p/4439886.html
Copyright © 2011-2022 走看看