课堂小练习—电梯

一题目及要求

由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

二.设计思路

1.先计算出所输入的楼层里最高的层数Max

2.从1遍历到Max,求出每一次的所走楼层和,找出最少的并且输出。

三.源代码

// Elevator.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream.h>
#define MAX 15                  //电梯最大承载人数

//计算数组中最高的楼层
int max_array(int a[],int num)
{
    int floor=1;
    for(int i=0;i<num;i++)
    {
        if(floor<a[i])
        {
            floor=a[i];
        }
    }
    return floor;
}

//两个数求差,大数减小数
int cha(int a,int b)
{
    int sum=0;
    if(a>=b)
    {
        sum=a-b;
    }
    else
    {
        sum=b-a;
    }
    return sum;
}
//计算电梯应该到哪一层停
int answer(int a[],int num)
{
    int floor,max,sum=0,temp;
    max=max_array(a,num);
    for(int i=0;i<num;i++)    //令sum为数组的和
    {
        sum=sum+a[i];
    }
    for(i=1;i<=max;i++)        //在1楼和最高楼层之间遍历
    {
        temp=0;
        for(int j=0;j<num;j++)//计算在每一层需要走的楼层数的和
        {
            temp=temp+cha(i,a[j]);
        }
        if(sum>=temp)        //将走的最少的楼层的和赋值给floor
        {
            floor=i;
            sum=temp;
        }
    }
    return floor;
}
int main()
{
    int floor[MAX];
    int num=0;

    cout<<"请输入电梯中的人数(最多15人):";
    cin>>num;

    cout<<"请输入要到达的楼层(最高为18层):";
    for(int i=0;i<num;i++)
    {
        cin>>floor[i];
    }

    cout<<"电梯应该到第"<<answer(floor,num)<<"层停"<<endl;
    return 0;
}

四.结果及截图

五.心得体会

1.程序中有的算法和数学关系比较密切,对程序员来说,数学也很重要。

2.写程序之前,你可能觉得麻烦,有点困难,但是把它分成一步一步,这样思路清晰,也方便实现。

时间: 2024-10-13 07:59:49

课堂小练习—电梯的相关文章

课堂小测

/*信1805-3 20183769 赵常恒*/ package 课堂小测;import java.util.*;class ScoreInformation { private String stunumber; private String name; private double mathematicsscore; private double englishiscore; private double networkscore; private double databasescore;

课堂小练习-找“水王”

一.题目及要求 1)题目 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 2)要求 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?并且,使时间复杂度为O(n). 二.设计思路 1)刚开始看到此要求时,首先想到的是,将它们 按照每个ID出现的次数从大到小排序,但是这样的话,时间复杂度是O(n^2).

课堂作业:电梯调度

一.题目: 石家庄铁道大学基础大楼高18层,共有四部电梯.在上下课高峰期时,电梯从一楼上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层.设计算法算出电梯停在哪一楼层能够保证这次乘坐电梯的所有人爬楼梯的层数之和最少. 二.设计思路: 用遍历的方法,由于都是从一层开始坐,就从二层开始算起,算如果停在这一层总共需要上或者下多少楼层,然后再比较取最小值,从而得到电梯停在哪一楼层能够保证这次乘坐电梯的所有人爬楼梯的层数之和最少.. 三.源代码

课堂练习之电梯调度

一.题目:电梯调度 二.要求 1.在一楼,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层 2.电梯停在哪一楼层,能够保证乘坐电梯的所有乘客爬楼梯的层数之和最少 三.解题思路 假设电梯停在i层,我们可以计算出所有乘客总共需要爬楼梯的层数Y. 假设有N1个乘客在i层楼以下,N2个乘客在第i层楼,还有N3个乘客在第i层楼以上. 这个时候,如果电梯改停在i-1层,所有目的地在第i层及以上的乘客都需要多爬一层,即N2+N3层,而所有目的地在i-1层及以下的乘客可以少爬一层,总共可以少爬N1层. 因此

4月17号周五课堂练习:电梯最优问题

一.题目要求 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. 由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思想设第一个人按l1楼层,第二个人按l2楼层……第n个人按ln楼层.设最优的层数为x设计思路一:求绝对值得最小值min=|l1-x|+|l2-

课堂小练习: 设计、定义并实现complex类

#include<iostream> #include<cmath> using namespace std; class complex{ public: complex(double real0=0,double imaginary0=0); complex(complex &p); void add(complex); void qiumo(); void show(); private: double real; double imaginary; }; compl

课堂小技巧

[IE双倍距bug].nav{height:1px;background:#F60;overflow:hidden;}<div class="nav"></div>ie6下该1px会显示较多,也称双倍距产生因素同时①快 ②浮动 ③margin左右 会出现ie6双倍距bug ie6下不止1px是默认文字大小12px 文字大小和行间距造成的父元素body造成.大于默认文字大小12px即可,写溢出隐藏即可 解决方法:_display:inline; [min-heig

课堂小计

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication7{ class Program { static void Main(string[] args) { Console.WriteLine("请输入第一个数字");//“”屏幕显示出来的文字 string A = Console.ReadLine();//()内为输

html-v12.25+课堂小练习-布局左固定右自适应

存在一个问题就是当屏幕缩小至一定宽度的时候,边框栏会被挤开 1 body { 2 font-family: 'Amarante', cursive; 3 background: url(http://www.w3cplus.com/sites/default/files/bg_body.png) repeat; 5 } 6 7 .wrapper { 8 margin: 0 auto; 9 } 11 .header-wrapper{ 12 background-color: #BD9C8C; 13