电梯问题

1.题目:

石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。       由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。       问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

2.设计思路:

我打算用最笨的方法来实现它,记录所有登电梯乘客的楼层信息,从最低的楼层一直计算到最高楼层,进而比较求出其中最优解,从而电梯调度到那一层实现用户要求。

3.源代码:

 1 #include<iostream>
 2 #include<math.h>
 3 using  namespace std;
 4 int main()
 5 {
 6      int i,j;
 7      int m;
 8      int sum[18],summin;
 9      int max=2,min,n=0;
10      int a[15]={0};
11     cout<<"请输入乘电梯的人数:"<<endl;
12     cin>>n;
13      cout<<"请输入您想要去的楼层:"<<endl;
14     for(i = 0;i < n;i++)
15    {
16          cin>>a[i];    
17          if(a[i] <= 1)
18        {
19              cout<<"输入错误,请重新输入!"<<"	";
20              cin>>a[i];    
21         }
22    }
23      min = a[0];
24      for(i = 0;i < n;i++)
25    {
26          if(a[i] > max)
27             {
28                  max = a[i];
29             }    
30             if(a[i] <= min)
31             {
32                 min = a[i];
33             }
34     }
35      for(j = min;j <= max;j++)
36     {
37          sum[j] = 0;
38          for(i = 0;i < n;i++)
39         {
40              sum[j] += abs(a[i] - j);
41         }
42     }
43     summin = sum[min];
44      m = min;
45      for(j = min;j <= max;j++)
46    {
47          if(sum[j] < summin )
48         {
49              summin = sum[j];
50              m = j;
51         }
52     }
53      cout<<"电梯停在第"<<m<<""<<endl;
54      return 0;
55  }

4.结果截图:

5.心得体会:

还是最笨的方法,没能实现课堂上所说的优化算法,还是有些不足吧,希望以后能在这方面多多练习吧。

原文地址:https://www.cnblogs.com/zhengt/p/4439248.html