课堂练习—电梯调度
问题:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
由于楼层不太高(18层),在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
设计思路:假定有10个用户乘坐电梯,在第一层时,每人都摁一下需要到达的楼层数。利用循环语句分别计算出电梯停在1~18层时,用户爬楼梯的层数之和。再求出最小的那一层即可。
程序代码:
#include<iostream.h> #include<math.h> int main() { int a[10]; int b[18]; cout<<"请输入每个人需要停留的层数:"<<endl; for (int i=0;i<10;i++) { cin>>a[i]; } for (int j=0;j<18;j++) { int sum=0; for (int k=0;k<10;k++) { if (j-a[k]>=0) { sum=sum+j-a[k]; } if (j-a[k]<0) { sum=sum+a[k]-j; } } b[j]=sum; } int min=b[0]; int Y=0; for (int n=1;n<18;n++) { if (b[n]<min) { min=b[n]; Y++; } } cout<<endl; cout<<"为使所有乘客上下楼层数之和最少,电梯应停留的层数为:"<<Y<<endl; return 0; }
程序截图:
思考总结:在程序做出来之后,编译无错,但是输出结果并不是预期结果。在仔细观察代码后,发现在for循环里面a[k]写成了k。在这种情况下,就要在程序里选定一个数,然后去查看错误所在。