一、题目:

石家庄铁道大学基础教学楼一共有四部电梯,每层都有人上下,电梯在每一层都停。信1201-1班张一东每层都停有点儿不耐烦。如果在上下课高峰时刻电梯从一层上行,但只允许停留在某一层。每个人选择自己的目的地,使他们爬楼层数最少。

二、设计思想:

  1,(基础算法)首先用最笨的办法去思考这个问题,就是让电梯从第二层楼开始停。然后计算所有人爬楼层数之和,知道第N层,然后找出爬楼层数最少的就是电梯要停留的层数。

  2,(优化算法)假设电梯停在第 i 层楼,我们计算出所有乘客总共爬楼梯的层数是Y。如果有N1个乘客想去的楼层在第 i 层之下,有N2个乘客正好想去的楼层是第 i 层,有N3个乘客想去的楼层在第 i 层之上。这个时候,重点来了:如果电梯改停在i-1层,所有目的地在第i - 1层以下的乘客可以少爬1层,总共少爬N1层,所有在i层及以上的乘客要多爬一层,总共多爬N2+N3层,这时总共需要爬Y-N1+N2+N3。反之,如果电梯在i+1层停所有目的地在第 i 层以上的乘客可以少爬1层,总共少爬N3层,所有在 i 层及以下的乘客要多爬一层,总共多N1+N2层,这时总共需要爬Y+N1+N2-N3层。可见,当N1 > N2+N3 时,电梯在第i-1层楼停更好;当N1+N2 <  N3 时,电梯在i+1层停更好。其他情况在第i层更好。如此一来,问题的解法就出来了,从第一层开始考察,计算各位乘客走的楼层的数目,然后根据N1,N2,N3之间的关系进行调整,知道找到最佳楼层。

三、程序源代码:

package com.java.com.aikan;import java.util.Scanner;public class dianti2 {public static void main(String[] args){int N,num;//电梯层数,乘客要停的电梯数Scanner in=new Scanner(System.in);System.out.print("请输入楼层数:");N=in.nextInt();int array[]=new int[N+1];for(int i=2;i<=N;i++){System.out.print("请输入去第"+i+"层的乘客数:");array[i]=in.nextInt();}youhua(N,array);}}public static void youhua(int N,int array[])//优化{int N1=0,N2=0,N3=0,i,j,k;int min=0,m=2,sum=0;array[1]=0;for(i=2;i<=N;i++)sum+=array[i];for(i=2;i<=N;){N1+=array[i-1];N2=array[i];N3=sum-N1-N2;if(N1+N2<N3)i++;elsebreak;}for(j=2;j<=N;j++){k=i>j?(i-j):(j-i);min+=array[j]*k;}System.out.println("停在第"+i+"层,上下楼层数最小值"+min);}}

 四、结果截图

 

五、实验总结:

  我们两个人没有想到什么优化方案,只是想到了最本的方法,经过老师的讲解,还是没有能够理解,最后又跟其他小队商量大概理解了算法思想。两个人如果不行还是要求助同学。

转载于:https://www.cnblogs.com/zhaixing/p/4442371.html

N层电梯只停一层情况下,求所有人爬楼层数最少相关推荐

  1. 最优装载问题(将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 )

    最优装载问题是将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 e.g: 设有重量 ...

  2. layui 启用禁用_在不启用Apple Pay的情况下禁用烦人的Apple Pay通知

    layui 启用禁用 iPhone/iPad: Not interested in Apple Pay, and tired of seeing notifications about it? You ...

  3. 基于S7–1500的单部六层电梯教程(二)

    此文开始讲解[单部六层电梯]的程序编写思路,由于自身能力限制,许多编写思路不一定足够严谨,但是足够起到入门效果.(初学时,俺直接拿着六部十层的程序啃,痛苦无比.) 依旧以西门子去年的线上资格赛为背景( ...

  4. 华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价

    华夏常春藤 This is for those of you out there who are about to start your job search and who may be worri ...

  5. 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数

    最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...

  6. 使用nginx代理的情况下获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  7. 华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价...

    华夏常春藤 This is for those of you out there who are about to start your job search and who may be worri ...

  8. 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。

    有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数.(假设每次摔落时,如果没有摔 ...

  9. 两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法

    题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...

最新文章

  1. Mastering Algorithms with C中文版附带源码说明
  2. 浅议 JavaScript 的 Promises/Futures 模式
  3. Labview 2017安装教程
  4. iframe嵌套改变url地址
  5. Drools可执行模型还活着
  6. 利用已有的大数据技术,如何构建机器学习平台
  7. QT 异步函数和同步函数交换问题
  8. Python序列之字符串
  9. linux查看文件权限_Linux权限管理 -- 文件权限
  10. 微信小程序 API-转发(Share)
  11. 英伟达官网如何下载显卡老版本驱动
  12. 一个c语言程序多个源文件,链接多个C源文件
  13. Android播放声音SoundPool、MediaPlayer、AudioTrack
  14. 利用Tsai-lenz算法实现手眼标定
  15. 极客创新大赛|微创机器人号探索飞船即将启航
  16. python处理netcdf_Python处理netCDF文件
  17. 用excel对2000年-2015年游戏行业分析
  18. 信息传递与交换是不是计算机网络的功能,计算机网络的主要功能是信息交换和____...
  19. 专硕的好消息!北京要大力发展专硕,新增硕士专硕为主!
  20. 福建专科计算机学校排名2015,2015福建专科学校排名及排行榜

热门文章

  1. FreeNAS112-U7 2019.12.8 Plugins
  2. Solaris 9 x86 u7 for vmware 安装指南
  3. 浅析最好、最坏、平均、均摊时间复杂度
  4. 群处守住嘴,独处守住心
  5. 微信小程序实现pcm音频转换wav音频
  6. ElasticSearch 亿级数据检索深度性能优化
  7. php imagick,PHP中imagick函数的中文解释_PHP
  8. 机器学习算法之PCA(主成分分析)人脸识别,最小重构误差和最大化散度证明,PCA主成分分析原理剖析,PCA人脸识别matlab实现,PCA人脸识别python实现
  9. 负能量:技术是条不归路吗?
  10. 公路领域新型基础设施建设报告(附下载)