课堂练习-电梯调度
1.题目
•石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
•由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
•问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
2.设计思想
这道题目,采用最简单粗暴的遍历可以简单地求出来,如果要优化代码,可以先找出一个楼层x,然后比较X+1所需的爬楼数以及X-1的爬楼数,并且采用类似递归的思想来找到最佳的楼层数。至于起始值X可以用所有人要去的楼层数的平均值来代替,这样程序就可以在最快时间内获得最佳楼层数。
3.源代码
1 #include<iostream.h> 2 #include <stdio.h> 3 #include<math.h> 4 void jisuan(int &y,int dian[],int n ,int ave) 5 { 6 int i=0; 7 y=0; 8 for(i=0;i<n;i++) 9 { 10 y=y+abs(dian[i]-ave); 11 } 12 } 13 void main() 14 { 15 int dian[10]; //电梯只能容纳十个人 16 int i,n=0,ave,sum=0,y=0,x=0,z=0; 17 for(i=0;i<10;i++) 18 { 19 cout<<"请输入您要去的楼层(1-18),输入0表示电梯开始运行"<<endl; 20 cin>>dian[i]; 21 if(dian[i]==0) 22 { 23 break; 24 } 25 else 26 { 27 sum=sum+dian[i]; 28 n++; 29 } 30 } 31 ave=sum/n; 32 jisuan(y,dian,n,ave); 33 jisuan(x,dian,n,ave+1); 34 jisuan(z,dian,n,ave-1); 35 if(y>x) 36 { 37 while(1) 38 { 39 if(y>x) 40 { 41 y=x; 42 ave=ave+1; 43 jisuan(y,dian,n,ave); 44 jisuan(x,dian,n,ave+1); 45 } 46 else 47 { 48 break;} 49 } 50 } 51 else 52 { 53 if(y>z) 54 { 55 while(1) 56 { 57 if(y>z) 58 { 59 y=z; 60 ave=ave+1; 61 jisuan(y,dian,n,ave); 62 jisuan(z,dian,n,ave+1); 63 } 64 else 65 { 66 break; 67 } 68 } 69 } 70 } 71 cout<<"最佳楼层是:"<<ave<<endl<<"一共要爬的楼层数是:"<<y<<endl; 72 }
4.实验截图
5.总结
我们在设计程序时就应该考虑到代码的优化,为了使产品能够拥有更加的性能,我们应该在设计过程中就逐步对代码进行优化。