课堂练习-电梯调度

1.题目  

•石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
•由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
•问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
2.设计思想
  这道题目,采用最简单粗暴的遍历可以简单地求出来,如果要优化代码,可以先找出一个楼层x,然后比较X+1所需的爬楼数以及X-1的爬楼数,并且采用类似递归的思想来找到最佳的楼层数。至于起始值X可以用所有人要去的楼层数的平均值来代替,这样程序就可以在最快时间内获得最佳楼层数。
3.源代码
 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 }

4.实验截图

5.总结

我们在设计程序时就应该考虑到代码的优化,为了使产品能够拥有更加的性能,我们应该在设计过程中就逐步对代码进行优化。

posted on 2015-04-19 14:44  菠萝吃么  阅读(132)  评论(0编辑  收藏  举报

导航