一题目及要求

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

二.设计思路

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

posted on 2015-04-19 15:53  梦里侃花落  阅读(140)  评论(0编辑  收藏  举报