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++;
             else
                 break;
         }
         for(j=2;j<=N;j++)
         {

             k=i>j?(i-j):(j-i);
             min+=array[j]*k;
         }
         System.out.println("停在第"+i+"层,上下楼层数最小值"+min);
     }

 }

四,程序截图:

五,实验总结:

  在看到这道题时我们先对题意进行透彻的分析避免对题意误解,在理解了题意之后用了最简单的思想去对问题进行了分析,就是对每一楼层进行遍历,求出在每一层的爬楼层数后求出最小的那一个,后来在老师的引导下对这一思想进行了优化,就是对问题进行一个假设,这是解题的关键。通过这次练习我又学习了一种新的解题思路——假设法,即先给问题假设一个结论,然后再去验证此结论。

时间: 2024-10-13 17:06:50

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

软件工程课堂练习——N层电梯只停一层求乘客爬楼层数最少(基本方法+优化方法)

题目: •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 一.设计思想 1.解法一 可以从第一层开始枚举一直到第N层,然后计算如果电梯在第x层停的话所有乘客总共要爬多少层楼.这是最为直接的一个解法.程序代码就

(hdu step 6.1.2)Eddy&#39;s picture(在只给出二维坐标点的情况下,求让n个点连通的最小费用)

题目: Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 172 Accepted Submission(s): 126   Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to be

(hdu step 1.3.1)FatMouse&#39; Trade(在收入需要一定的付出的情况下求最大收入)

题目: FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5092 Accepted Submission(s): 1530   Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats gua

(hdu step 5.1.4)Farm Irrigation(在两个节点合并有限制条件的情况下,求集合的个数)

题目: Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 202 Accepted Submission(s): 104   Problem Description Benny has a spacious farm land to irrigate. The farm land is a rectangle,

(hdu step 6.1.7)Connect the Cities(在有的路已经修建好的情况下,求让n个点连通的最小费用)

题目: Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 391 Accepted Submission(s): 139   Problem Description In 2100, since the sea level rise, most of the cities disappear. Though

(hdu step 6.1.6)Jungle Roads(在索引为字符索引的情况下,求让n个点连通的最小费用)

题目: Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 126 Accepted Submission(s): 118   Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of

浅谈当前情况下的视频内容收费

这一两周,观众的很多焦点都放在了影视内容上面了,例如刚拉开序幕的上海电影节引起了众多人的关注,还有近期的一些电视电影热剧,也让互联网视频网站成为流量激增的入口.其中,各个互联网视频平台也纷纷让视频逐渐走上付费的道路.我们都知道,在早之前,以优酷为代表的视频网站很大一部分都是以广告作为主要收入,这些视频点播网站为了增加收入,会延长广告的播放时间.而最近热播的电视剧<花千骨>为例,广告播放时间都超过60秒,有的网站还超过90秒的,如此超长的广告时间,很显然会给用户带来极差的体验,这就与互联网用户体

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

C++:一般情况下,设计函数的形参只需要两种形式

C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const int &p_para). 它们的特点如下: # 引用形参适用于需要改变变量数据的情况,常量引用形参适用于不需要改变对象.变量数据的情况. # 引用形参需要对象.变量来传递值,常量引用形参则不需要,可以直接传递表达式或者函数返回值. 通过这两种方式可以涵盖所有可能需要的设计情况,而通过这种方式实现的