码迷,mamicode.com
首页 > 其他好文 > 详细

电梯优解

时间:2015-04-20 00:13:06      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

一、题目

     石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!