趣味算法题——电梯调度问题

电梯调度问题
摘要由CSDN通过智能技术生成

这是《编程之美》中的一道题,刚开始题目比较简单,但是逐步推进之后的问题也有些难度,这样由简单到难的一步步深入的思想比较值得学习。

最初的问题

假如电梯在高峰期间只允许在某一层停留,所有的乘客在一楼上电梯,到达某层后,所有乘客从电梯下来,到达自己要去的楼层,在一楼的时候所有乘客选出自己要去的楼层,电梯根据所有乘客选择的楼层信息得出要停留的楼层。
那么,电梯停留在那一层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

问题的分析和解法

该问题本质上是一个优化问题,首先为则个问题找到一个合适的抽象模型。从问题中可以看出,有两个因素会影响到最后的结构:乘客的数目即需要停留的楼层,因此,我们可以从统计到达各层的乘客数目开始分析。
假设楼层总共有N层,电梯停留在X层,要去第i层的乘客总数目是Tot[i],这样,所爬楼梯的总数就可以表示出老。
因此,我们就是要找到一个整数X使得这个总数的值最小。

解法

首先思考简单解法,可以从第1层开始枚举X一直到第N层,然后再计算出如果电梯在第X层的话,所有乘客总共需要爬多少层楼。这是最为直接的一个解法。可以看出,这个算法需要两重循环来完成计算

int n=0;//这个表示电梯所在的最高楼层
        int nPerson[] = new int[n+1];//这个数组表示要去每一层的乘客数
        //上面的两个变量应该是给出的,这里只是示意代码没有初始化。
        int nFloor,nMinFloor,nTargetFloor;//分别表示电梯停在第n层时候的结果,目前为止的最小结果,最小结果所停的楼层。
        nTargetFloor = -1;//考虑到初始化最小结果和最小结果所砸的楼层,所以先设定为一个非法值
        
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值