课堂作业——电梯调度

一、题目和要求

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

二,思路

基本实现可以采用枚举法,即每到一个楼层,就要计算出所有人上下的情况,将所有人上下楼层数和相加然后求出其中最小值。但是,如果采用这种方式,代码时间复杂度较高,为O(n^2),于是我采用了上课老师讲述的方法。

具体设计思路:假设想去往第i-1层,第i层,第i+1层的学生人数分别为N2,N1,N3。设电梯停在第i层,则所有人的爬楼总和为Y=N2+N3;依次类推,若电梯停在第i-1层,爬楼总和为Y-N2+N1+N3;若电梯停在第i+1层,爬楼总和为Y-N3+N1+N2;

假设电梯停在第i层最好。

当Y>Y-N2+N1+N3,即N2-N1-N3<0,即N1+N3<N2,电梯停在第i-1层较好。

当Y>Y-N3+N1+N2,即N3-N2-N1>0,即N1+N2<N3,电梯停在第i+1层较好。

三,实现代码

#include <iostream.h>

#include<conio.h>

void dianti(int Arr[]);

int main()

{

int max = 18;//电梯的最高楼层为18层

int man[20];//电梯内最多能承载20人

int min,stop;//最小爬楼数,和电梯应停的楼层数

int N1,N2,N3;

int jixu;

min=0;

stop = 1;                                                      for(int i=0;i<20;i++)

{

man[i]=0;

}

dianti(man);

N1 = N3  = 0;

N2 = man[1];

for( i = 2; i <= max; i++)

{

N3 += man[i];

min=min+ man[i] * (i-1);

}

for( i=2;i<=max;i++)

{

if(N1 + N2 < N3)

{

stop = i;

min=min+(N1 + N2 - N3);

N1 += N2;

N2 = man[i];

N3 =N3- man[i];

}

else

{

break;

}

}

cout<<"电梯应停在第"<<stop<<"层"<<endl;

cout<<"所有人爬楼最小层数和为"<<min<<"层"<<endl;

cout<<"要继续测试吗?jixu(0,退出 1,继续)"<<endl;  cin>>jixu;  if(jixu==1)  {   cout<<endl;   main();  }  else  {   return 0;

}  getch();  return 0;

} void dianti(int Arr[])

{

int n;

cout<<"请输入一层时电梯内人数:";

cin>>n;

int *a=new int[n];

cout<<"请输入每个人所按的楼梯层数:";

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

{

cin>>a[i];

Arr[a[i]]=Arr[a[i]]+1;

} }

四,实验结果

五,实验总结

这次实验开始时没有明确思路,但老师上课讲的思路听明白了,所以就按老师上课讲的思路进行编程。最终完成了本次实验。

时间: 2024-08-05 19:32:32

课堂作业——电梯调度的相关文章

课堂作业-电梯调度

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

课堂练习--电梯调度

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

结对作业--电梯调度

结对编程 结对成员:王长(2011040101179)CODING:https://coding.net/u/smile-wang  高庆阳(2013040101173) 博客:http://www.cnblogs.com/gaoqingyang1994/   CODING:https://coding.net/u/gaoqingyang1994 结对编程的优缺点 在结对编程模式下,一对程序员可以平等的.互补地进行开发工作:他们一起分析,一起设计,一起写测试用例,一起编码,一起做测试...这样在

结对编程作业——电梯调度

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

结对作业—电梯调度

现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 上面是结对编程题目要求,我的小伙伴是白新宇:http://home.cnblogs.com/u/bai

课堂练习——电梯调度

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

课堂练习—电梯调度

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

课堂训练——电梯调度

一.题目要求 •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思想 用循环分别求出停在从第一层到最高层分别一共走多少层,其中对于一个i层, 假设数组中比i层小的有lcount个,等于i层的有mcou

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

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