课堂练习------电梯调度

题目:
石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
设计思路:
要所有乘客爬楼的层数最少,电梯所停的楼层一定在乘客搭乘的最低楼层和最高楼层之间,我们可以将之间的所有楼层的爬楼梯的层数之和算出来,然后进行比较,从而
从而选出最少的楼层数。
代码:
 1 #include<iostream.h>
 2 #define MAXSIZE 100
 3 void input(int &num,int people[])
 4 {
 5     cout<<"请输入乘坐电梯的人数(限乘15人):";
 6     cin>>num;
 7     if(num>15)
 8     {
 9         cout<<"输入错误!";
10     }
11     cout<<"请输入每个人要去的楼层(最高为18层):";
12     for(int i=0;i<num;i++)
13     {
14         cin>>people[i];
15         if(people[i]>18)
16         {
17             cout<<"输入错误!";
18         }
19     }
20 }
21 int main()
22 {
23     int num,lowest,highest,sum,floor;
24     int people[MAXSIZE];
25     input(num,people);
26     floor=0;
27     for(int i=0;i<num;i++)
28     {
29         floor+=people[i];
30     }
31     highest=lowest=people[0];
32     for(i=0;i<num;i++)
33     {
34         if(people[i]>highest)
35         {
36             highest=people[i];
37         }
38         else
39         {
40             lowest=people[i];
41         }
42     }
43     int temp=floor;
44     for(i=lowest;i<highest;i++)
45     {
46         sum=0;
47         for(int j=0;j<num;j++)
48         {
49             if((people[j]-i)<0)
50             {
51                 sum=sum+i-people[j];
52             }
53             else
54             {
55                 sum=sum+people[i]-i;
56             }
57         }
58 
59         if(sum<temp)
60         {
61             floor=i;
62             temp=sum;
63         }
64     }
65     cout<<"电梯停在"<<floor<<"层爬楼梯总层数最低";
66     return 0;
67 }

截图:

 心得体会:这次的编程确实还是挺有难度的。虽然编程中遇到了不少困难,但在查阅资料之后,还是解决了。程序虽然还有一些问题,但大体上都能够执行出来。
原文地址:https://www.cnblogs.com/xuqingtian/p/4439771.html