课堂训练——电梯调度

一、题目要求

•石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。

•由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

•问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

二、设计思想

用循环分别求出停在从第一层到最高层分别一共走多少层,其中对于一个i层, 假设数组中比i层小的有lcount个,等于i层的有mcount个,大于i层的有rcount个。用N[i]代表i与数组中每个数差的绝对值之和。有N(i) = m;当i+1时,设等于i+1的数有midNext个,则此时:小于i+1的数有  lcount+mcount个, 大于i+1的数有 rcount-mcount个。相比较N(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,增加了lcount+mcount。相比较N(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,减少了 rcount-mcount。

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

// chengxuzhimei.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#define MAX 1000
void getFloorNo(int *input, int size)
{
    int result[MAX] = {0};
    int lcount,mcount,rcount;      //分别表示小于、等于、大于第i个数
    int cur;
    int l,r;
    int i;
    l = r = 0;
    cur = 0;
    lcount = 0;
    rcount = size;
    mcount = 0;
    for(i = 0;i<size;i++)
    {
        r+=input[i];
     }
     result[0] = r;
     printf("停在各楼层时爬楼梯的总和分别为:\n");
     for(i=1;i<=input[size-1];i++)
     {
         lcount += mcount;
         rcount -= mcount;
         r -= rcount;
         l += lcount;
         result[i] = l + r;
         printf ( "停在第%d层总共要走%d层楼梯\n",i, result[i] );

         mcount = 0;
         while(input[cur] == i)
         {
             cur++;
             mcount++;
         }
     }
}
int main(void)
{
    int nperson;
    int input[MAX];
    printf("请输入上电梯的人数:");
    scanf("%d",&nperson);
    printf("请输入每个人进入电梯后按下的楼层数\n");
    for(int i=0;i<nperson;i++)
    {
        scanf("%d",&input[i]);
    }
    getFloorNo(input,nperson);

    return 0;
}  

四、截图

五、心得体会

课上没有了解老师说的方法,只有自己想的复杂的方法,就是时间复杂度为O(N^2)。但是在课下发现网上有好多这个问题的相关方法,经过分析还是觉得这种方法较容易理解。其实思维还是太正常化,被局限了。以后要活跃点呢。

时间: 2024-10-11 16:40:13

课堂训练——电梯调度的相关文章

课堂练习--电梯调度

一.题目要求 •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的XXX东觉得在每层都停觉得不耐烦. •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思想 这次的电梯的设计题目一开始我其实想明白了,但是老师后来讲了半天结果又说迷糊了...所以今天做作业之前看了一下同学们的设计思想,发

课堂作业-电梯调度

1.要求 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦.由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层.问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 2.设计思路 1).开始的思路是:使用遍历的思想,将每层和用户去的层数做差求和,比较出最小的层数,则为最佳. 2). 优化 首先假设电梯停在n层需要爬楼梯Y层

课堂练习——电梯调度

题目:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 一.设计思路 基础大楼共有18层,则电梯可停2-18层,假设一部电梯每次最多乘20人.进入电梯之后,每人先输入要去的楼层,则程序开始计算在各楼层情况下,电梯乘客的上下楼总和,并比较大小,当取得最小值时,电梯则应

课堂作业——电梯调度

一.题目和要求 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. 由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二,思路 基本实现可以采用枚举法,即每到一个楼层,就要计算出所有人上下的情况,将所有人上下楼层数和相加然后求出其中最小值.但是,如果采用这种方式,代

课堂练习—电梯调度

问题:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦.        由于楼层不太高(18层),在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层.        问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 设计思路:假定有10个用户乘坐电梯,在第一层时,每人都摁一下需要到达的楼层数.利用循环语句分别计算出电梯停在1~18层时

软件工程课堂作业(七)续——电梯调度之整体设计

一.题目要求: 1.可以获得电梯和乘客所在楼层: 2.可以根据乘客的需求到达想到达的楼层. 二.设计思路: 1.通过用户输入可以获取乘客和电梯所在楼层: 2.通过循环,输出电梯向上/向下走的过程. 三.源代码: 1 // 电梯调度——胡亚宝 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 using namespace std; 7 8 9 int _tmain() 10 { 11 int a,b,c,m,i; 12

课堂练习之电梯调度

一.题目:电梯调度 二.要求 1.在一楼,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层 2.电梯停在哪一楼层,能够保证乘坐电梯的所有乘客爬楼梯的层数之和最少 三.解题思路 假设电梯停在i层,我们可以计算出所有乘客总共需要爬楼梯的层数Y. 假设有N1个乘客在i层楼以下,N2个乘客在第i层楼,还有N3个乘客在第i层楼以上. 这个时候,如果电梯改停在i-1层,所有目的地在第i层及以上的乘客都需要多爬一层,即N2+N3层,而所有目的地在i-1层及以下的乘客可以少爬一层,总共可以少爬N1层. 因此

结对开发--电梯调度报告

“电梯调度”需求分析 一.项目背景 试想一下,石家庄铁道大学基础教学楼的电梯配置如下:大厦有18层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤).其他常量数据:电梯速度,开/关门时间,乘客的时间要在/走出电梯.可以对这些合理的假设. 二.数据分析 我们随机选择了一天去现场调查基础教学楼电梯的使用情况,列表如下: 电梯名称 停靠层数 乘客限制 重量限制/kg 电梯开关时间/s 乘客进出电梯时间/s 电梯1 8-18层(双层) 15人 1150 4s

对于电梯调度的想法

电梯调度 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了. 对于这个问题我有以下想法