一、题目

石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
二、设计思想
课上老师提供了一种思路,即假设电梯停在第i层时所有乘客爬楼梯的层数之和最少,此时所有乘客总共要爬的层数为Y。如果有N1个乘客到i-1层,有N2个乘客到i层,N3个乘客到i+1层。若电梯停在第i-1层,所有乘客总共要爬的层数为Y-(N1-N2-N3);若电梯停在i+1层,所有乘客总共要爬的层数为Y+(N1+N2-N3)。所以N1>N2+N3时,电梯应停在i-1层;N3>N1+N2时,电梯应停在i+1层;否则应停在i层。在此思路的基础上,和结对的同学讨论决定用所有楼层的平均值当第i层,并与小于i层的和大于i层的比较找出最合适的。
三、代码
 1 #include<iostream.h>
 2 #include <stdio.h>
 3 #include<math.h>
 4 void jisuan(int &y,int dian[],int n ,int ave)
 5 {
 6     int i=0;
 7     y=0;
 8     for(i=0;i<n;i++)
 9     {
10         y=y+abs(dian[i]-ave);
11     }
12 }
13 void main()
14 {
15     int dian[10]; //电梯只能容纳十个人
16     int i,n=0,ave,sum=0,y=0,x=0,z=0;
17     for(i=0;i<10;i++)
18     {
19         cout<<"请输入您要去的楼层(1-18),输入0表示电梯开始运行"<<endl;
20         cin>>dian[i];
21         if(dian[i]==0)
22         {
23             break;
24         }
25         else
26         {
27             sum=sum+dian[i];
28             n++;
29         }
30     }
31     ave=sum/n;
32     jisuan(y,dian,n,ave);
33     jisuan(x,dian,n,ave+1);
34     jisuan(z,dian,n,ave-1);
35     if(y>x)
36     {
37         while(1)
38         {
39             if(y>x)
40             {
41                 y=x;
42                 ave=ave+1;
43                 jisuan(y,dian,n,ave);
44                 jisuan(x,dian,n,ave+1);
45             }
46             else
47             {
48                 break;}
49         }
50     }
51     else
52     {
53         if(y>z)
54         {
55             while(1)
56             {
57                 if(y>z)
58                 {
59                     y=z;
60                     ave=ave+1;
61                     jisuan(y,dian,n,ave);
62                     jisuan(z,dian,n,ave+1);
63                 }
64                 else
65                 {
66                     break;
67                 }
68             }
69         }
70     }
71     cout<<"最佳楼层是:"<<ave<<endl<<"一共要爬的楼层数是:"<<y<<endl;
72 }

四、运行结果截图

电梯调度练习

电梯调度练习

五、总结
此次题目用最基本的遍历算法,计算所有情况也可以实现,但时间复杂度高。这正是一道优化题目,通过此题我接触了优化类的问题,明白了程序不仅要实现,还要尽量优化算法。

相关文章:

  • 2021-04-24
  • 2021-12-19
  • 2021-05-28
  • 2021-07-02
  • 2022-01-14
  • 2021-11-29
  • 2021-12-19
猜你喜欢
  • 2021-06-19
  • 2021-12-09
  • 2021-08-27
  • 2021-05-30
  • 2021-09-11
  • 2021-09-08
  • 2021-12-03
  • 2022-01-07
相关资源
相似解决方案