随堂练习_电梯

一、问题描述

  •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。

  •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
  •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
二、设计思想
    根据乘客的输入楼层,对电梯到达每一楼层时进行计算,然后将其结果存放到一个数组里,比较得出最小的值
  并输入。
三、源代码
  
#include "stdafx.h"
#include <stdio.h>
#define HIGH 6
#define N 15
void scan(int Input[],int floor[],int num)                //用户输入所要到达的楼层
{
    int i;
    do
    {
        printf("请输入进入电梯的人数(最多15人):");
        scanf("%d",&num);
        if(num>15)
            printf("您的输入有误!
");
    }while(num>15);
    printf("请输入每个人到达的楼层:");
    for(i = 0;i<num;i++)
    {
        scanf("%d",&Input[i]);
    }
    for(i=0;i<num;i++)                        //对输入的楼层进行计算
    {
        switch(Input[i])
        {
        case 1:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        case 2:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        case 3:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        case 4:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        case 5:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        case 6:
            floor[Input[i]] = floor[Input[i]]+1;
            break;
        default:
            printf("楼层不对!");
            break;
        }
    }
}
void count(int sum[],int floor[])                //对到达每层时要走的楼层总数计算
{
    int i,j;
    for(i=1;i<HIGH+1;i++)
    {
        for(j = 1;j<HIGH+1;j++)
        {
            if(j<=i)
                sum[i] = sum[i]+floor[j]*(i-j);
            else
                sum[i] = sum[i]+floor[j]*(j-i);
        }
    }
}
void Min(int sum[])                                //求出最小的值,并输出楼层
{
    int min,sign;
    min = sum[1];
    sign = 1;                                    //用以标记最小值所在的楼层
    for(int i=1;i<HIGH+1;i++)
    {
        if(sum[i]<min)
        {
            min = sum[i];
            sign = i;
        }
    }
    printf("最少所走的总层数为%d,在第%d层。
",min,sign);

}
int main(int argc, char* argv[])
{
    int num;                                //电梯内的人数
    int floor[HIGH+1]={0,0,0,0,0,0,0};        //用于存放到达每层楼的人数,初始每层楼的人数是0
    int Input[N];                            //用于存放到用户输入的楼层
    int sum[HIGH+1]={0,0,0,0,0,0,0};
    for(int i=0;i<0;i++)
    {
        Input[i] = 0;                        //初始化输入的为零
    }
    scan(Input,floor,num);
    count(sum,floor);
    Min(sum);
    return 0;
}

四、运行结果

  

五、总结

    我没有采用老师说的那种算法,而是用了最简单的办法,就是一个一个的算出来,在代码的实现方面并没有遇到什么困难。

  我的代码设计的是六层高度,根据输入,然后将输入的楼层依次存放在floor[]的数组中,每层 i 每输入依次,则该楼层floor[i]

  就加一,最后根据floor[]中的数,算出最小的值。值得一说的是,我把floor[]的长度规定成了7,比楼层的数目要多1,这是因为

  这样在输出和计算的时候比较方便的实现。

原文地址:https://www.cnblogs.com/littlechar/p/4439229.html