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、实验总结:
用的比较笨的方法,对于算法的优化方面还没有太好的想法,还要仔细的想一想上课老师讲的优化方案。