zoukankan      html  css  js  c++  java
  • 随堂练习_电梯

    一、问题描述

      •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信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,这是因为

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

  • 相关阅读:
    转】用Maven构建Mahout项目
    转】Mahout学习路线图
    转】Spark DataFrames入门指南:创建和操作DataFrame
    转】Spark DataFrame小试牛刀
    转】用Maven构建Hadoop项目
    【转】Hive导入10G数据的测试
    软考概述
    vi 按了ctrl+s之后
    VC6.0入门使用
    后台使用oracle前台使用easyui分页机制
  • 原文地址:https://www.cnblogs.com/littlechar/p/4439229.html
Copyright © 2011-2022 走看看