课堂练习—电梯调度

问题:石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信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。在这种情况下,就要在程序里选定一个数,然后去查看错误所在。

原文地址:https://www.cnblogs.com/cainiao1hao/p/4437512.html