标签:
一、设计思路
对这个问题进行思考的过程中,还是选择了最原始的方法,需要上电梯的人,没人都按下自己要前往的目的楼层,然后假设一个最优的目的楼层,
用每个人按下的目的楼层减去假设的最优楼层,取绝对值然后再相加,所得的和就是全部人需要爬的楼层数,然后选择最小的值,返回它的脚标,就是最优的目的楼层数。
二、源代码
1 import java.util.*; 2 3 class Elevator 4 { 5 public static int min(int s[]) 6 { 7 int min = s[0]; 8 int temp = 0; 9 for (int dest=0;dest<s.length ;dest++ ) 10 { 11 if(s[dest]<min) 12 { 13 temp = dest; 14 } 15 } 16 return temp-1; 17 } 18 public static void main(String[] args) 19 { 20 System.out.print("请输入要乘坐电梯的人数:"); 21 Scanner sc = new Scanner(System.in); 22 int num = sc.nextInt(); 23 int[] arr = new int[num]; 24 25 int dest = 0;//目的楼层 26 int max = arr[0]; 27 for (int i=0;i<arr.length ;i++ )//循环接收楼层数 28 { 29 System.out.print("请第"+(i+1)+"个人输入要去的楼层:"); 30 Scanner sc1 = new Scanner(System.in); 31 int n = sc1.nextInt(); 32 arr[i] = n; 33 } 34 for (int i=0;i<arr.length ;i++ ) 35 { 36 if(arr[i]>max) 37 max = arr[i]; 38 } 39 int[] sum = new int[max]; 40 for (dest=1;dest<=max ;dest++ ) 41 { 42 for (int i=0;i<arr.length ;i++ ) 43 { 44 sum[dest-1] += Math.abs(arr[i]-dest); 45 } 46 System.out.println("如果要到达第"+dest+"层,全部人需要爬的楼层总和为:"+sum[dest-1]+"层"); 47 } 48 System.out.println("因此应该到达的楼层数是:"+min(sum)+"层"); 49 50 } 51 }
三、实验结果
四、心得体会
对于这种问题来说,还是相对侧重于数学的思想,解决问题的方法与很多,我想的这个也是最原始,最好想的,
实现起来也没有什么难度,但是还是应该有其他的更优的算法,还是应该多思考,多想一想还是对编程是有帮助的。
标签:
原文地址:http://www.cnblogs.com/KevinBin/p/4438968.html