zoukankan      html  css  js  c++  java
  • 课堂训练——电梯调度

    一、题目要求

    •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。觉得在每层都停觉得不耐烦。
    •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
    •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
    二、设计思想
    用循环分别求出停在从第一层到最高层分别一共走多少层,其中对于一个i层, 假设数组中比i层小的有lcount个,等于i层的有mcount个,大于i层的有rcount个。用N[i]代表i与数组中每个数差的绝对值之和。有N(i) = m;当i+1时,设等于i+1的数有midNext个,则此时:小于i+1的数有  lcount+mcount个, 大于i+1的数有 rcount-mcount个。相比较N(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,增加了lcount+mcount。相比较N(i)的情况, 位于i+1左边所有数与i+1的差的绝对值,减少了 rcount-mcount。

       N(i+1) = N(i) + lcount + mcount -(rcount-mcount); 
        mcount = midNext;
    三、代码实现

    // chengxuzhimei.cpp : 定义控制台应用程序的入口点。
    //
    #include "stdafx.h"
    #include "stdlib.h" 
    #define MAX 1000
    void getFloorNo(int *input, int size)
    {
        int result[MAX] = {0};
        int lcount,mcount,rcount;      //分别表示小于、等于、大于第i个数
        int cur;
        int l,r;
        int i;
        l = r = 0;
        cur = 0;
        lcount = 0;
        rcount = size;
        mcount = 0;
        for(i = 0;i<size;i++)
        {
            r+=input[i];
         }
         result[0] = r;
         printf("停在各楼层时爬楼梯的总和分别为:
    ");
         for(i=1;i<=input[size-1];i++)
         {
             lcount += mcount;
             rcount -= mcount;
             r -= rcount;
             l += lcount;
             result[i] = l + r;
             printf ( "停在第%d层总共要走%d层楼梯
    ",i, result[i] );
            
             mcount = 0;
             while(input[cur] == i)
             {
                 cur++;
                 mcount++;
             }
         }
    }
    int main(void)  
    {
        int nperson;
        int input[MAX];
        printf("请输入上电梯的人数:");
        scanf("%d",&nperson);
        printf("请输入每个人进入电梯后按下的楼层数
    ");
        for(int i=0;i<nperson;i++)
        {
            scanf("%d",&input[i]);
        }
        getFloorNo(input,nperson);
    
        return 0;
    }  

    四、截图

    五、心得体会

         课上没有了解老师说的方法,只有自己想的复杂的方法,就是时间复杂度为O(N^2)。但是在课下发现网上有好多这个问题的相关方法,经过分析还是觉得这种方法较容易理解。其实思维还是太正常化,被局限了。以后要活跃点呢。

  • 相关阅读:
    Docker的镜像与容器
    【目标检测】YOLOv4中的Mish激活函数
    【深度学习】医学图像分割损失函数简介
    【深度学习】归一化方法
    【机器学习】Bagging与Boosting算法原理小结
    【目标检测】RCNN算法
    【机器学习】误差逆传播算法(反向传播算法)
    【机器学习】解决数据不平衡问题
    【干货总结】| Deep Reinforcement Learning 深度强化学习
    【深度学习】迁移学习Transfer Learning
  • 原文地址:https://www.cnblogs.com/123jy/p/4439251.html
Copyright © 2011-2022 走看看