• 电梯调度——课堂练习


    一、设计思路

          题目要求:

          石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。       由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。       问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

          设计思路:

              我采用最笨的方法来实现该程序:

              1、在不超载的情况下,根据乘电梯的人数来对应输入每个人所要到达的楼层;

              2、找出所有目的楼层的最大值和最小值,确定电梯停下的楼层范围;

              3、系统自动算出在目的楼层范围内所有人所要爬楼的总层数sum

              4、求出sum的最小值和最小值对应的楼层数,则该楼层数就是电梯停止的层数。

    二、源程序代码  

    1 // dianti.cpp : 定义控制台应用程序的入口点。

     2 //

     3 

     4 #include "stdafx.h"

     5 #include<iostream>

     6 #include<math.h>

     7 using  namespace std;

     8 int main()

     9 {

    10     int i,j;//i表示乘电梯的人数,j表示电梯停留的层数(j<=20

    11     int m;//m表示电梯在第m层停下

    12     int sum[18],summin;//sum所有人需要爬楼的层数总和,min表示sumsum的最小值

    13     int max=2,min,n=0;//max表示在一楼时所有人的想去楼层中德最高楼层,n表示总人数

    14     int a[15]={0};//电梯限载15人,a[i]表示去第i个人要去的楼层

    15     cout<<"请输入乘电梯的人数:"<<endl;

    16     cin>>n;

    17     cout<<"请输入您想要去的楼层:"<<endl;

    18     for(i = 0;i < n;i++)

    19    {

    20         cin>>a[i];    //a[i]表示去第i+1个人要去的楼层

    21         if(a[i] <= 1)

    22        {

    23             cout<<"输入错误,请重新输入!"<<" ";

    24             cin>>a[i];    //a[i]表示去第i个人要去的楼层

    25        }

    26    }

    27     min = a[0];

    28     for(i = 0;i < n;i++)

    29    {

    30         if(a[i] > max)

    31            {

    32                 max = a[i];

    33            }    

    34             if(a[i] <= min)

    35            {

    36                 min = a[i];

    37            }

    38    }

    39     for(j = min;j <= max;j++)

    40    {

    41         sum[j] = 0;

    42         for(i = 0;i < n;i++)

    43        {

    44             sum[j] += abs(a[i] - j);

    45        }

    46    }

    47     summin = sum[min];

    48     m = min;

    49     for(j = min;j <= max;j++)

    50    {

    51         if(sum[j] < summin )

    52        {

    53             summin = sum[j];

    54             m = j;

    55        }

    56    }

    57     cout<<"电梯停在第"<<m<<""<<endl;

    58     return 0;

    59 }

    三、测试代码     

    1 // dianti.cpp : 定义控制台应用程序的入口点。

     2 //

     3 

     4 #include "stdafx.h"

     5 #include<iostream>

     6 #include<math.h>

     7 using  namespace std;

     8 int main()

     9 {

    10     int i,j;//i表示乘电梯的人数,j表示电梯停留的层数(j<=20

    11     int m;//m表示电梯在第m层停下

    12     int sum[18],summin;//sum所有人需要爬楼的层数总和,min表示sumsum的最小值

    13     int max=2,min,n=0;//max表示在一楼时所有人的想去楼层中德最高楼层,n表示总人数

    14     int a[15]={0};//电梯限载15人,a[i]表示去第i个人要去的楼层

    15     cout<<"请输入乘电梯的人数:"<<endl;

    16     cin>>n;

    17     cout<<"请输入您想要去的楼层:"<<endl;

    18     for(i = 0;i < n;i++)

    19    {

    20         cin>>a[i];    //a[i]表示去第i+1个人要去的楼层

    21         if(a[i] <= 1)

    22        {

    23             cout<<"输入错误,请重新输入!"<<" ";

    24             cin>>a[i];    //a[i]表示去第i个人要去的楼层

    25        }

    26    }

    27     min = a[0];

    28     for(i = 0;i < n;i++)

    29    {

    30         if(a[i] > max)

    31            {

    32                 max = a[i];

    33            }    

    34             if(a[i] <= min)

    35            {

    36                 min = a[i];

    37            }

    38    }

    39     cout<<"目的楼层的范围:"<<max<<"——"<<min<<endl;

    40     cout<<"每层楼对应的要爬的楼层数总和:"<<endl;

    41     for(j = min;j <= max;j++)

    42    {

    43         sum[j] = 0;

    44         for(i = 0;i < n;i++)

    45        {

    46             sum[j] += abs(a[i] - j);

    47        }

    48         cout<<j<<":"<<sum[j]<<endl;

    49    }

    50 

    51     summin = sum[min];

    52     m = min;

    53     for(j = min;j <= max;j++)

    54    {

    55         if(sum[j] < summin )

    56        {

    57             summin = sum[j];

    58             m = j;

    59        }

    60    }

    61     cout<<"电梯停在第"<<m<<""<<endl;

    62     return 0;

    63 }

    四、运行结果截图

         源程序结果截图:

          

         测试结果截图:

          

    五、总结与心得

          在该实验中,对乘坐电梯的人数没有合理的处理,直接输出乘坐人数显然不合理的;另外,在计算电梯停在哪一层的算法也有待优化,但是对我来说,那些优化的算法理解起来有点不方便,故而也就用我自己方式来解决了,从这一方面来看,自己要学习的东西还有很多,以后要继续努力;最后一点我一直认为适合自己的方法才是好方法,至于那些高级的方法,就需要自己多加努力去攻克了,争取让它也成为自己的第一选择。

  • 相关阅读:
    Ex 6_20 最优二叉搜索树..._第六次作业
    Ex 6_12 凸多边形的最优三角剖分..._第六次作业
    Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业
    Ex 6_4 判断序列是否由合法单词组成..._第六次作业
    maven配置阿里云镜像时(私服设置~JEECG)
    node、npm、webpack、vue-cli傻傻分不清?
    设计模式~观察者模式和发布订阅模式的比较:
    前端~定位属性position(relative、absolute、fixed)的分析
    debounce防抖函数减少函数调用的逻辑分析(包裹上时间的外衣,在时间还没来时,kill)
    js原生滚动与使用插件better-scroll不起作用原因
  • 原文地址:https://www.cnblogs.com/mudanhuakai/p/4437865.html
Copyright © 2020-2023  润新知