电梯优解

一、题目

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

 

四、运行截图

五、总结

     对于优化其实刚拿到题目时是没有想过的,当时只是用了笨方法实现了,考虑的不完善。之后老师介绍了目前这种思路。于是

优化时用了此方法。这种方法就是一个相对的算法。与老师所说不同的是仅比较当层与上一层。如果不符合,电梯继续上行。这次

实验让我对算法还是颇感兴趣。比笨方法实现起来简单的多。

 

转载于:https://www.cnblogs.com/wang321/p/4440318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值