• 电梯调度--c++--软件工程


    一、设计思路

    (1)将乘客要去的楼层数存起来。

    (2)假设yi为乘客要爬楼层数之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)|

    (3)比较y1到y18的值,找出最小的。

    (4)输出结果

    二、源代码

    #include "iostream.h"
    #include "stdlib.h"
    #define MAXSIZE 15
    
    void Input(int &num,int flour[])                //输入乘坐电梯的人数及楼层
    {
    	cout<<"**************电梯调度小程序***************"<<endl;
        cout<<"请输入乘坐电梯的人数(限定15人):";
        cin>>num;
    	cout<<endl;
        if(num>15)
        {
            cout<<"输入错误!"<<endl;
            exit(0);
        }
        cout<<"请输入每个人要去的层数(最高18层):";
        for(int i=0;i<num;i++)
        {
            cin>>flour[i];
            if(flour[i]>18)
            {
                cout<<"输入错误!"<<endl;
                exit(0);
            }
        }
    }
    void getSmallestFlour(int num,int flour[],int &small)    //计算出爬楼梯层数最少的楼层
    {
        int sum,temp=small;
        int highest,lowest;
        highest=lowest=flour[0];
        for(int i=0;i<num;i++)                //找出要去的楼层中最高的楼层
        {
            if(flour[i]>highest)
            {
                highest=flour[i];
            }
            else                            //找出最低楼层
            {
                lowest=flour[i];
            }
        }
        for(i=lowest;i<=highest;i++)        //从最低楼层开始遍历直到最高楼层
        {
            sum=0;
            for(int j=0;j<num;j++)
            {
                if((flour[j]-i)<0)            //计算爬楼梯的层数之和
                {
                    sum=sum+i-flour[j];
                }
                else
                {
                    sum=sum+flour[j]-i;
                }
            }
    		cout<<endl;
            cout<<"当电梯停在"<<i<<"层,则乘客爬楼梯的总和为"<<sum<<endl;
    		cout<<endl;
            if(sum<temp)
            {
                small=i;            //记录和最小的楼层号
                temp=sum;            //记录最小的和
            }
        }
    }
    
    int main(int argc, char* argv[])
    {
        int num,aver,flour[MAXSIZE];
        Input(num,flour);
        aver=0;
        for(int i=0;i<num;i++)
        {
            aver+=flour[i];
        }
        getSmallestFlour(num,flour,aver);
        cout<<"电梯将停在"<<aver<<"层。"<<endl;
    	cout<<endl;
        return 0;
    }
    

      

    三、运行结果截图

    四、心得体会

      虽然我认为这个电梯算法不符合人性化,但是它最有力的解决堵塞问题。遇到问题主要是逻辑一开始有点乱。

  • 相关阅读:
    Codeforces Round #613 选讲
    Codeforces Round #612 选讲
    Codeforces917E
    一道题20
    LOJ#2244. 「NOI2014」起床困难综合症
    求欧拉回路
    *LOJ#2134. 「NOI2015」小园丁与老司机
    vim操作命令
    常见问题解决
    CentOS7下如何修改mysql的数据目录
  • 原文地址:https://www.cnblogs.com/dlyxx/p/4438618.html
Copyright © 2020-2023  润新知