课堂练习——电梯调度
2015-04-18 09:47 奔波儿灞 阅读(152) 评论(0) 编辑 收藏 举报题目:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
一、设计思路
基础大楼共有18层,则电梯可停2-18层,假设一部电梯每次最多乘20人。进入电梯之后,每人先输入要去的楼层,则程序开始计算在各楼层情况下,电梯乘客的上下楼总和,并比较大小,当取得最小值时,电梯则应该在该层停下。
二、源代码
//楼梯起止为2-18层,人数上限为20人 #include<iostream.h> #include<math.h> int fl[20]={0}; //存储各楼层有几名乘客 int sum[20]={0}; //存储各楼层乘客上下楼总和 int Min(int a[]) //计算最小楼层 { int min=a[2]; int i; int j=2; for(i=3;i<=18;i++) { if(min>a[i]) { min=a[i]; j=i; } } return j; } int main() { int n; //输入的乘客人数 int m; //判断楼层 int i; int j; cout<<"请输入电梯人数:"<<endl;//n<=20 cin>>n; cout<<"请选择要去的楼层:"<<endl; for(i=0;i<n;i++) { cin>>m; //2<=m<=18 fl[m]++; } for(i=2;i<=18;i++) { for(j=2;j<=18;j++) { if(fl[j]==0) continue; else sum[i]=sum[i]+abs(j-i)*fl[j]; } } cout<<"电梯应该在第"<<Min(sum)<<"层停。"<<endl; return 0; }
三、运行结果
四、个人总结
这是一道优化题,并不是实现题,所以当程序实现时,我们要减少冗余运算,比如在上述程序中,当某楼层无人前往时,则计算上下楼总和时,则可以不计算该层人数。可以直接用continue语句跳过,减少毫无用处的运算。