一、设计思路

(1)将乘客要去的楼层数存起来。

(2)假设yi为乘客要爬楼层数之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)|

(3)比较y1到y18的值,找出最小的。

(4)输出结果

二、源代码

#include "iostream.h"
#include "stdlib.h"
#define MAXSIZE 15 void Input(int &num,int flour[]) //输入乘坐电梯的人数及楼层
{
cout<<"**************电梯调度小程序***************"<<endl;
cout<<"请输入乘坐电梯的人数(限定15人):";
cin>>num;
cout<<endl;
if(num>15)
{
cout<<"输入错误!"<<endl;
exit(0);
}
cout<<"请输入每个人要去的层数(最高18层):";
for(int i=0;i<num;i++)
{
cin>>flour[i];
if(flour[i]>18)
{
cout<<"输入错误!"<<endl;
exit(0);
}
}
}
void getSmallestFlour(int num,int flour[],int &small) //计算出爬楼梯层数最少的楼层
{
int sum,temp=small;
int highest,lowest;
highest=lowest=flour[0];
for(int i=0;i<num;i++) //找出要去的楼层中最高的楼层
{
if(flour[i]>highest)
{
highest=flour[i];
}
else //找出最低楼层
{
lowest=flour[i];
}
}
for(i=lowest;i<=highest;i++) //从最低楼层开始遍历直到最高楼层
{
sum=0;
for(int j=0;j<num;j++)
{
if((flour[j]-i)<0) //计算爬楼梯的层数之和
{
sum=sum+i-flour[j];
}
else
{
sum=sum+flour[j]-i;
}
}
cout<<endl;
cout<<"当电梯停在"<<i<<"层,则乘客爬楼梯的总和为"<<sum<<endl;
cout<<endl;
if(sum<temp)
{
small=i; //记录和最小的楼层号
temp=sum; //记录最小的和
}
}
} int main(int argc, char* argv[])
{
int num,aver,flour[MAXSIZE];
Input(num,flour);
aver=0;
for(int i=0;i<num;i++)
{
aver+=flour[i];
}
getSmallestFlour(num,flour,aver);
cout<<"电梯将停在"<<aver<<"层。"<<endl;
cout<<endl;
return 0;
}

  

三、运行结果截图

四、心得体会

虽然我认为这个电梯算法不符合人性化,但是它最有力的解决堵塞问题。遇到问题主要是逻辑一开始有点乱。

电梯调度--c++--软件工程的更多相关文章

  1. 【软件工程】电梯调度的初步实现 李亚文&&郭莉莉

    一.开门见山,代码粘 using System; using System.Collections.Generic; using System.Data; using System.Drawing; ...

  2. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  3. 电梯调度编写(oo-java编程)

    第二单元的问题是写一个关于电梯调度的程序. 需要模拟一个多线程实时电梯系统,从标准输入中输入请求信息,程序进行接收和处理,模拟电梯运行,将必要的运行信息通过输出接口进行输出. 主要锻炼学生的多线程程序 ...

  4. OO第二单元总结(多线程的电梯调度)

    经过第一单元作业的训练,在做第二单元的作业的时候,要更加的有条理.但是第二次作业多线程的运行,带来了更多的运行的不确定性.呈现出来就是程序会出现由于线程安全问题带来的不可复现的bug.本单元的作业也让 ...

  5. OO电梯调度

    告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可 ...

  6. 电梯调度系统(界面由C图形库编绘)

    1.编程题目 电梯调度系统 2.结对编程组员 黄冠译,刘畅 3.编程语言 C语言图形库 4题目要求 编写人员:刘畅,黄冠译 代码如下: # include <stdio.h> # incl ...

  7. PairProject 电梯调度 【附加题】

    [附加题] 改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享. 目前的设计有什么缺点, 你会如何改进它? 1.之前判断电梯是否闲置的函 ...

  8. 电梯调度系统(界面由C图形库编绘)

    电梯调度系统编程 1.编程题目 电梯调度. 2.结对编程组员 黄冠译,刘畅. 3.编程语言 C语言图形库. 4.题目要求: 5.代码运行及结果调试: ① 运行界面为C++图形库支持,开始运行的初始界面 ...

  9. oo第二次博客-三次电梯调度的总结与反思

    本单元从电梯调度相关问题层层深入,带领我们学习并运用了了多线程相关的知识. 三次电梯调度依次为单电梯单容量.单电梯可携带.多电梯可携带. 一.我的设计 在第一次作业中,使用了最简单的FIFO调度方法. ...

随机推荐

  1. Bootstrap CSS 描述

    <!DOCTYPE html><html lang="zh-CN"><head> <!--定于内容,和内容的编码格式--> < ...

  2. 如何解决Android的SDK与ADT不匹配问题

    win7/xp 下面安装Android虚拟机,更新SDK后,在Eclipse preference里指向android-sdk-windows时.出现 :This Android SDK requir ...

  3. sql 基本操作

    SQL基本操作   一数据类型1整数型 int2精确数值型 decimal(n,p)n为总位数,p为小数位数3浮点型 float4字符型char(n)n最大为4,varchar(n)5日期型datat ...

  4. 前端构建工具grunt

    简单配置grunt 配置gulp还是grunt都是在node的环境下安装的,所以在这之前保证你的node环境已经安装好了! -------------------------------------- ...

  5. Apache 多端口多站点配置实例

    分享下Apache多端口多站点的配置方法,配置apache服务器的朋友参考下. 配置httpd.conf 监听多个端口 复制代码代码如下: # Listen: Allows you to bind A ...

  6. Win+R快速打开你的应用程序

    参考自:http://blog.csdn.net/nothing0318/article/details/7179405 1:在你的磁盘任意位置创建一个文件夹,比如C:MyShortcut,然后将你的 ...

  7. 关于垃圾回收(GC和Marshal)有感

    最近做一个挂机软件.要求是挂个三四天没事,不会报错.开始的时候都是顺利的,所有步骤都是可以ok.但是当测试运行的是就出现问题了,内存居然会在一个Task跑完之后暴涨几M的内存.开了一台测试机测试了一天 ...

  8. .NET设计模式系列文章 from TerryLee

    http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记来 ...

  9. 微软TTS尝试系列之开篇杂谈(仅思路)

    第一次写博客,不知道如何下手,思路也乱,就先聊聊怎么进的园子吧,但愿不会浪费大家太多的宝贵时间>_<. 与博客园结缘应该是大三刚开始的时候.当时学校教务处想开发一个教务安排系统,为了省钱就 ...

  10. 刀哥多线程之gcd-01-sync&async

    同步 & 异步 概念 同步 必须等待当前语句执行完毕,才会执行下一条语句 异步 不用等待当前语句执行完毕,就可以执行下一条语句 NSThread 中的 同步 & 异步 - (void) ...