一题目及要求
由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
二.设计思路
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.写程序之前,你可能觉得麻烦,有点困难,但是把它分成一步一步,这样思路清晰,也方便实现。