电梯调度——课堂练习

一、设计思路

题目要求:

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

设计思路:

我采用最笨的方法来实现该程序:

1、在不超载的情况下,根据乘电梯的人数来对应输入每个人所要到达的楼层;

2、找出所有目的楼层的最大值和最小值,确定电梯停下的楼层范围;

3、系统自动算出在目的楼层范围内所有人所要爬楼的总层数sum;

4、求出sum的最小值和最小值对应的楼层数,则该楼层数就是电梯停止的层数。

二、源程序代码

1 // dianti.cpp : 定义控制台应用程序的入口点。

2 //

3

4 #include "stdafx.h"

5 #include<iostream>

6 #include<math.h>

7 using  namespace std;

8 int main()

9 {

10     int i,j;//i表示乘电梯的人数,j表示电梯停留的层数(j<=20)

11     int m;//m表示电梯在第m层停下

12     int sum[18],summin;//sum所有人需要爬楼的层数总和,min表示sumsum的最小值

13     int max=2,min,n=0;//max表示在一楼时所有人的想去楼层中德最高楼层,n表示总人数

14     int a[15]={0};//电梯限载15人,a[i]表示去第i个人要去的楼层

15     cout<<"请输入乘电梯的人数:"<<endl;

16     cin>>n;

17     cout<<"请输入您想要去的楼层:"<<endl;

18     for(i = 0;i < n;i++)

19    {

20         cin>>a[i];    //a[i]表示去第i+1个人要去的楼层

21         if(a[i] <= 1)

22        {

23             cout<<"输入错误,请重新输入!"<<"\t";

24             cin>>a[i];    //a[i]表示去第i个人要去的楼层

25        }

26    }

27     min = a[0];

28     for(i = 0;i < n;i++)

29    {

30         if(a[i] > max)

31            {

32                 max = a[i];

33            }

34             if(a[i] <= min)

35            {

36                 min = a[i];

37            }

38    }

39     for(j = min;j <= max;j++)

40    {

41         sum[j] = 0;

42         for(i = 0;i < n;i++)

43        {

44             sum[j] += abs(a[i] - j);

45        }

46    }

47     summin = sum[min];

48     m = min;

49     for(j = min;j <= max;j++)

50    {

51         if(sum[j] < summin )

52        {

53             summin = sum[j];

54             m = j;

55        }

56    }

57     cout<<"电梯停在第"<<m<<"层"<<endl;

58     return 0;

59 }

三、测试代码

1 // dianti.cpp : 定义控制台应用程序的入口点。

2 //

3

4 #include "stdafx.h"

5 #include<iostream>

6 #include<math.h>

7 using  namespace std;

8 int main()

9 {

10     int i,j;//i表示乘电梯的人数,j表示电梯停留的层数(j<=20)

11     int m;//m表示电梯在第m层停下

12     int sum[18],summin;//sum所有人需要爬楼的层数总和,min表示sumsum的最小值

13     int max=2,min,n=0;//max表示在一楼时所有人的想去楼层中德最高楼层,n表示总人数

14     int a[15]={0};//电梯限载15人,a[i]表示去第i个人要去的楼层

15     cout<<"请输入乘电梯的人数:"<<endl;

16     cin>>n;

17     cout<<"请输入您想要去的楼层:"<<endl;

18     for(i = 0;i < n;i++)

19    {

20         cin>>a[i];    //a[i]表示去第i+1个人要去的楼层

21         if(a[i] <= 1)

22        {

23             cout<<"输入错误,请重新输入!"<<"\t";

24             cin>>a[i];    //a[i]表示去第i个人要去的楼层

25        }

26    }

27     min = a[0];

28     for(i = 0;i < n;i++)

29    {

30         if(a[i] > max)

31            {

32                 max = a[i];

33            }

34             if(a[i] <= min)

35            {

36                 min = a[i];

37            }

38    }

39     cout<<"目的楼层的范围:"<<max<<"——"<<min<<endl;

40     cout<<"每层楼对应的要爬的楼层数总和:"<<endl;

41     for(j = min;j <= max;j++)

42    {

43         sum[j] = 0;

44         for(i = 0;i < n;i++)

45        {

46             sum[j] += abs(a[i] - j);

47        }

48         cout<<j<<":"<<sum[j]<<endl;

49    }

50

51     summin = sum[min];

52     m = min;

53     for(j = min;j <= max;j++)

54    {

55         if(sum[j] < summin )

56        {

57             summin = sum[j];

58             m = j;

59        }

60    }

61     cout<<"电梯停在第"<<m<<"层"<<endl;

62     return 0;

63 }

四、运行结果截图

源程序结果截图:

测试结果截图:

五、总结与心得

在该实验中,对乘坐电梯的人数没有合理的处理,直接输出乘坐人数显然不合理的;另外,在计算电梯停在哪一层的算法也有待优化,但是对我来说,那些优化的算法理解起来有点不方便,故而也就用我自己方式来解决了,从这一方面来看,自己要学习的东西还有很多,以后要继续努力;最后一点我一直认为适合自己的方法才是好方法,至于那些高级的方法,就需要自己多加努力去攻克了,争取让它也成为自己的第一选择。

时间: 2024-12-16 03:55:45

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

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

一.题目要求: 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

课堂练习--电梯调度

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

课堂练习之电梯调度

一.题目:电梯调度 二.要求 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.所有电梯采用统一按钮控制 请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了. 对于这个问题我有以下想法

电梯调度系统(界面由C图形库编绘)

电梯调度系统编程 1.编程题目 电梯调度. 2.结对编程组员 黄冠译,刘畅. 3.编程语言 C语言图形库. 4.题目要求: 5.代码运行及结果调试: ① 运行界面为C++图形库支持,开始运行的初始界面如图,且默认所有电梯初始状态都为1楼,此时不分奇偶层: ② 我设置了鼠标响应事件,左边上下箭头为当前楼层有人要上或下的按钮,可以用鼠标直接点击响应,点击后要输入有多少人在此楼层等待,示例点击5楼,输入15人,如图所示: ③ 输入完毕后,电梯会根据单双层或全部楼层4个电梯的忙碌状态调度一个电梯过去,第

电梯调度之需求分析

电梯调度之需求分析 结对人员:郎国杰.刘伯建 一.项目背景 石家庄铁道大学基础教学楼中有四部电梯,然而基础教学楼却有十八层,每天都有学生们忙碌的去上课,每天都有成群的学生在排队等电梯,而有时候却还不如直接爬上去来的快 二.项目目的 为学生缓解高峰期电梯的压力,提高电梯的利用率. 三.项目调查 (1)总共18层,4部电梯,每部限乘15人,重量限制1150kg. (2)1,2号电梯只停1层以及8-18双层楼,3,4号电梯只停一层以及8-18单层楼. (3)高峰期:7:30--8:00,11:50--

结对编程之电梯调度

编程任务:电梯调度 结对人员:左少辉-12061209,杨昊兰-12061202,吕雨朗 一.此次软工作业确实是让人却步的不敢开始,不过结对编程使得我对完成作业又有了信心,开始没有积极组队的我落单了,后来只能是申请加入已经组好的队伍,所以我们其实是一个三人组,都说人多力量大,想法也就会开阔许多,做起作业来也会顺利许多.起初对作业不是很了解,光是看英文要求就已经醉了,后来还是硬着头皮开始了漫长的代码阅读,浅学c#觉得语法也就一般般,不过看到如此绚丽的代码还是各种懵~确实一个人做起来简直是困难,但是

“电梯调度”需求分析

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