标签:
一、题目
石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
二、设计思想
假设电梯现在停在第i层,i层以下的人有N1个,i层有N2个,i层以上的人有N3个,当前需要走的楼梯数为Y。当电梯再往上走一层时,i层及i层以下的人一共需要多走N1+N2步,而i层以上的人则一共少走了N3步,所以当N1+N2<N3时,电梯应该继续往上走。
三、源代码
#include<iostream.h> int main() { int floor[19]={0}; int i,a; cout<<"输入要去的层数(以0结束):"; while(a!=0) { cin>>a; if(a!=0) { while(a>18||a<0) { cout<<"出错,重输:"; cin>>a; } floor[a]=floor[a]+1; } } int downfloor= 0, equalfloor = floor[0], upfloor= 0; for (i = 1; i < 19; i++) { upfloor+= floor[i]; } for(i = 1; i <19; i++) { equalfloor= floor[i]; downfloor+= floor[i - 1]; upfloor= upfloor - equalfloor; if (downfloor + equalfloor >= upfloor) { cout<<"电梯应该停在第"<<i<<"层"<<endl; break; } } return 0; }
四、运行截图
五、总结
对于优化其实刚拿到题目时是没有想过的,当时只是用了笨方法实现了,考虑的不完善。之后老师介绍了目前这种思路。于是
优化时用了此方法。这种方法就是一个相对的算法。与老师所说不同的是仅比较当层与上一层。如果不符合,电梯继续上行。这次
实验让我对算法还是颇感兴趣。比笨方法实现起来简单的多。
标签:
原文地址:http://www.cnblogs.com/wang321/p/4440318.html