电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615

在实际情况下,电梯并不需要扫描所有的楼层,只需要扫描有乘客进出电梯的楼层。

所以,我增加了2个全局变量,用来保存计算出来的电梯上下行的最上下的楼层。

#include <thread>
#include<time.h>#define LEVEL 6
int flag[LEVEL + 1];  //1到Level层的外部输入,取值为0,1,2,3,其中0表示无乘客,1表示有乘客上行,2表示有乘客下行,3表示既有上行又有下行
int dest[LEVEL + 1];  //目的楼层的记录,取值为0,1,其中0表示不是目的地,1表示是目的地
int levelMax, levelMin; //levelMax是进出电梯最大楼层,levelMin是进出电梯最小楼层void input()
{int lev, fla;while (cin >> lev >> fla) if (lev > 0 && lev <= LEVEL){if (fla>0 && fla <= 3)flag[lev] = fla; //外部输入else dest[lev] = 1;//内部输入}
}
void upPull(int loc)//上行接客
{flag[loc]--;cout << "上行接客" << loc << endl;
}
void downPull(int loc)//下行接客
{flag[loc] -= 2;cout << "下行接客" << loc << endl;
}
void push(int loc)//送客
{dest[loc] = 0;cout << "送客" << loc << endl;
}
int getMax()
{levelMax = 0;for (int loc = 1; loc <= LEVEL; loc++){if (flag[loc] || dest[loc])levelMax = max(levelMax, loc);}return levelMax;
}
int getMin()
{levelMin = LEVEL + 1;for (int loc = 1; loc <= LEVEL; loc++){if (flag[loc] || dest[loc])levelMin = min(levelMin, loc);}return levelMin;
}void run()
{int loc = 1;cout << "    当前楼层" << loc << endl;while (1){while (loc <= getMax()){if (flag[loc] == 1 || flag[loc] == 3)upPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc<getMax())loc++;else break;cout << "    当前楼层" << loc << endl;}while (loc >= getMin()){if (flag[loc] == 2 || flag[loc] == 3)downPull(loc);if (dest[loc])push(loc);Sleep(1000);if (loc > getMin())loc--;else break;cout << "    当前楼层" << loc << endl;}}
}int main()
{thread t1(input);thread t2(run);t1.join();t2.join();return 0;
}

优化点:

(1)电梯并不需要扫描所有的楼层,只需要扫描有乘客进出电梯的楼层。

(2)解决了之前代码在上下行转换时,重复显示当前楼层的问题。

示例1:

示例2:

这个例子乍一看不对劲,实际上是对的。

当3楼上行乘客进入电梯后,如果一段时间之内不输入,电梯就会直接去接别人了。

示例3:

在这样的一个模拟程序中,我们并不知道每一次电梯开门出去了几个人,这也是和实际情况吻合的。

电梯控制算法(2)单电梯场景——优化扫描算法相关推荐

  1. 电梯控制算法(1)单电梯场景——简单扫描算法

    坐电梯小技巧   https://blog.csdn.net/nameofcsdn/article/details/106044619 电梯控制算法(1)单电梯场景--简单扫描算法   https:/ ...

  2. 电梯控制算法(5)单电梯场景——屏蔽较近楼层进梯请求

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 我们会遇到这样一种场景: 电梯在下行的时候,5楼乘客在外面按钮下行按 ...

  3. 电梯控制算法(4)单电梯场景——限层策略

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 电梯很多都有限层策略,主要是定差限层和高中低限层2种. 单电梯一般不 ...

  4. 电梯控制算法(7)多电梯场景——两个等价电梯——动态指派

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 两个电梯是等价的,都是全部楼层可达的. 当有乘客在外面按电梯时,哪个 ...

  5. 电梯控制算法(8)多电梯场景——双电梯的空闲停靠

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 如果,两个电梯是等价的,那么,2个电梯的空闲停靠楼层是多少呢? 假设 ...

  6. 电梯控制算法(6)多电梯场景——两个等价电梯——静态指派

    电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615 对于多电梯场景,首先我们考虑最简单的情况,即两个电梯是等价的,都是全 ...

  7. STM32F4单电梯调度系统(扫描算法)

    这是第一次做嵌入式相关的东西,使用了STM32F401VE芯片,由于没有板子,只能用Proteus进行仿真,在实现过程中遇到了很多困难. 修改了定时器中断内容,把调度算法放到主函数中,定时器中断只是简 ...

  8. 面向对象的程序设计-电梯调度系统的设计、优化与测试

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

  9. java面向对象模拟电梯_面向对象的程序设计-电梯调度系统的设计、优化与测试...

    面向对象的程序设计(2019)第二单元总结 I  对问题的初体验 在开始OO之旅前,对OO电梯早有耳闻.这一次终于轮到我自己实现OO电梯了.首先从顶层需求出发对电梯系统进行分析,对象包括电梯.任务和乘 ...

最新文章

  1. BestCoder冠军赛 - 1005 Game 【DP】
  2. Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面...
  3. visual c++ 部分窗口样式设置
  4. 浅析IT软件项目团队人力资源管理
  5. java输出动物,求大神帮助输出为什么只有动物名,几条腿,怎么叫,没有汤姆猫叫等...
  6. python莫比乌斯内接矩形_莫比乌斯反演例题集 ^_^(示例代码)
  7. 线程池框架-Executor
  8. VIP客户服务系统设计(外传)——面对变化的“世界”
  9. php mpm,Ubuntu Apache 切换到php-fpm+mpm_event模式
  10. 通过kmeans分析出租车数据并调用百度API进行可视化!
  11. [疑难解答]MSN常见问题及回答(转)
  12. 手机App性能测试工具Genymotion安卓模拟器使用和简介
  13. 【自动驾驶】ROS机器人操作系统总结
  14. 给一个函数求导MATLAB,matlab求导
  15. Django restframework重写get_serializer_class方法自定义serializer_class
  16. 计算机word排版实训报告,Word排版实训报告
  17. 51单片机 ADC0832酒精传感器
  18. 计算机键盘的tab键是哪个,电脑键盘中的Tab键都有哪些妙用
  19. 开源推荐 - EAdmin开箱即用的后台UI框架
  20. 洛谷 P2178 [NOI2015]品酒大会 解题报告

热门文章

  1. 华硕笔记本F80s无法安装ubuntu的解决方法
  2. EAS 销售出库单上的部门 显示规则
  3. 【报告分享】2021年春节长假旅游大数据报告-中国旅游研究院(附下载)
  4. Qml学习笔记:cpp与qml的交互调用方式
  5. iOS------主题设置--Appearance
  6. 设置源码解析--Uim/Sim卡锁定
  7. 跪求大神,写一套QQ 协议的云控
  8. 不仅仅是更小的成人大脑——通过新生儿大脑成像了解后期的神经发育情况
  9. 2021年美容师(初级)考试总结及美容师(初级)考试试题
  10. 知识付费音视频和直播播放器