1、题目:

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

2、设计思路:

刚看到题目的时候首先想到的就是最笨的方法,记录所有登电梯乘客的楼层信息,从电梯停在最低的楼层开始一直计算到最高楼层,进而比较求出其中最优解,后来听了老师讲的优化方法,感觉不太理解,就用嘴笨的方法实现的。

3、源代码:

 #include<iostream>
 #include<math.h>
 using  namespace std;
 int main()
 {
      int i,j;
      int m;
      int sum[18],summin;
      int max=2,min,n=0;
      int a[15]={0};
     cout<<"请输入乘电梯的总人数:"<<endl;
     cin>>n;
      cout<<"请分别输入每个人想要去的楼层号:"<<endl;
     for(i = 0;i < n;i++)
    {
          cin>>a[i];    
          if(a[i] <= 1)
        {
              cout<<"输入错误,请重新输入!"<<"\t";
              cin>>a[i];    
         }
    }
      min = a[0];
      for(i = 0;i < n;i++)
    {
          if(a[i] > max)
             {
                  max = a[i];
             }    
             if(a[i] <= min)
             {
                 min = a[i];
             }
     }
      for(j = min;j <= max;j++)
     {
          sum[j] = 0;
          for(i = 0;i < n;i++)
         {
              sum[j] += abs(a[i] - j);
         }
     }
     summin = sum[min];
      m = min;
      for(j = min;j <= max;j++)
    {
          if(sum[j] < summin )
         {
              summin = sum[j];
              m = j;
         }
     }
      cout<<"电梯应停在第"<<m<<"层,此时爬楼总层数最少。"<<endl;
      return 0;
  }

4、实验截图:

5、实验总结:

       用的比较笨的方法,对于算法的优化方面还没有太好的想法,还要仔细的想一想上课老师讲的优化方案。