标签:
1.题目。
石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
2.设计思想。
假设 3层 4层 5层 6层
4人 3人 4人 2人
如果电梯在三层停,则有9个人爬楼;如果电梯在4层停,与在3层楼停做比较,则有9个人少爬一层楼,4个人多爬一层楼,说明总的来说所有人爬的楼梯数减少了;
如果在5层停,与在4层楼停做比较,则有6个人少爬一层楼,7个人多爬一层楼,说明总的来说所有人爬的楼梯数增加了;
可以从上面推断出来,只要电梯停的楼层下去的人和在想去这个楼层下面楼层的人数的和大于总人数的一半时,该楼层为电梯停的最优楼层。
3.代码设计。
#include<iostream.h> int main() { for(int i=0;;i++) { int dianti[18]={0},k,m=0,sum=0; cout<<"请输入坐电梯的人分别要去的楼层。(输入0结束)"<<endl; for(i=0;;i++) { cin>>k; if(k!=0) { dianti[k-1]=dianti[k-1]+1; m=m+1; } else break; } sum=dianti[0]; for(i=1;;i++) { if(sum>m/2) { cout<<"电梯停的最佳楼层为:"<<i<<endl; break; } else sum=sum+dianti[i]; } } return 0; }
4.截图。
5.个人总结。
有的一些编程问题可以用数学方法去计算推倒出一些相关规律,这样可以使得比较复杂的问题简单化,从而使得算法更加简单。
标签:
原文地址:http://www.cnblogs.com/nulidexuezha/p/4439483.html