题目:
石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
设计思路:
要所有乘客爬楼的层数最少,电梯所停的楼层一定在乘客搭乘的最低楼层和最高楼层之间,我们可以将之间的所有楼层的爬楼梯的层数之和算出来,然后进行比较,从而
从而选出最少的楼层数。
代码:
1 #include<iostream.h> 2 #define MAXSIZE 100 3 void input(int &num,int people[]) 4 { 5 cout<<"请输入乘坐电梯的人数(限乘15人):"; 6 cin>>num; 7 if(num>15) 8 { 9 cout<<"输入错误!"; 10 } 11 cout<<"请输入每个人要去的楼层(最高为18层):"; 12 for(int i=0;i<num;i++) 13 { 14 cin>>people[i]; 15 if(people[i]>18) 16 { 17 cout<<"输入错误!"; 18 } 19 } 20 } 21 int main() 22 { 23 int num,lowest,highest,sum,floor; 24 int people[MAXSIZE]; 25 input(num,people); 26 floor=0; 27 for(int i=0;i<num;i++) 28 { 29 floor+=people[i]; 30 } 31 highest=lowest=people[0]; 32 for(i=0;i<num;i++) 33 { 34 if(people[i]>highest) 35 { 36 highest=people[i]; 37 } 38 else 39 { 40 lowest=people[i]; 41 } 42 } 43 int temp=floor; 44 for(i=lowest;i<highest;i++) 45 { 46 sum=0; 47 for(int j=0;j<num;j++) 48 { 49 if((people[j]-i)<0) 50 { 51 sum=sum+i-people[j]; 52 } 53 else 54 { 55 sum=sum+people[i]-i; 56 } 57 } 58 59 if(sum<temp) 60 { 61 floor=i; 62 temp=sum; 63 } 64 } 65 cout<<"电梯停在"<<floor<<"层爬楼梯总层数最低"; 66 return 0; 67 }
截图: