N层电梯只停一层情况下,求所有人爬楼层数最少
一、题目:
石家庄铁道大学基础教学楼一共有四部电梯,每层都有人上下,电梯在每一层都停。信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层电梯只停一层情况下,求所有人爬楼层数最少相关推荐
- 最优装载问题(将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 )
最优装载问题是将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 e.g: 设有重量 ...
- layui 启用禁用_在不启用Apple Pay的情况下禁用烦人的Apple Pay通知
layui 启用禁用 iPhone/iPad: Not interested in Apple Pay, and tired of seeing notifications about it? You ...
- 基于S7–1500的单部六层电梯教程(二)
此文开始讲解[单部六层电梯]的程序编写思路,由于自身能力限制,许多编写思路不一定足够严谨,但是足够起到入门效果.(初学时,俺直接拿着六部十层的程序啃,痛苦无比.) 依旧以西门子去年的线上资格赛为背景( ...
- 华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价
华夏常春藤 This is for those of you out there who are about to start your job search and who may be worri ...
- 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数
最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...
- 使用nginx代理的情况下获取用户真实IP
##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...
- 华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价...
华夏常春藤 This is for those of you out there who are about to start your job search and who may be worri ...
- 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。
有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数.(假设每次摔落时,如果没有摔 ...
- 两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法
题目:问题:一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损.现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2 ...
最新文章
- Mastering Algorithms with C中文版附带源码说明
- 浅议 JavaScript 的 Promises/Futures 模式
- Labview 2017安装教程
- iframe嵌套改变url地址
- Drools可执行模型还活着
- 利用已有的大数据技术,如何构建机器学习平台
- QT 异步函数和同步函数交换问题
- Python序列之字符串
- linux查看文件权限_Linux权限管理 -- 文件权限
- 微信小程序 API-转发(Share)
- 英伟达官网如何下载显卡老版本驱动
- 一个c语言程序多个源文件,链接多个C源文件
- Android播放声音SoundPool、MediaPlayer、AudioTrack
- 利用Tsai-lenz算法实现手眼标定
- 极客创新大赛|微创机器人号探索飞船即将启航
- python处理netcdf_Python处理netCDF文件
- 用excel对2000年-2015年游戏行业分析
- 信息传递与交换是不是计算机网络的功能,计算机网络的主要功能是信息交换和____...
- 专硕的好消息!北京要大力发展专硕,新增硕士专硕为主!
- 福建专科计算机学校排名2015,2015福建专科学校排名及排行榜
热门文章
- FreeNAS112-U7 2019.12.8 Plugins
- Solaris 9 x86 u7 for vmware 安装指南
- 浅析最好、最坏、平均、均摊时间复杂度
- 群处守住嘴,独处守住心
- 微信小程序实现pcm音频转换wav音频
- ElasticSearch 亿级数据检索深度性能优化
- php imagick,PHP中imagick函数的中文解释_PHP
- 机器学习算法之PCA(主成分分析)人脸识别,最小重构误差和最大化散度证明,PCA主成分分析原理剖析,PCA人脸识别matlab实现,PCA人脸识别python实现
- 负能量:技术是条不归路吗?
- 公路领域新型基础设施建设报告(附下载)