路灯 -- 2016网易笔试题

时间:2021-09-13 13:49:44

 

题目:

 一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。

 

输入描述:

每组数据第一行两个整数n和l(n大于0小于等于1000,l小于等于1000000000大于0)。第二行有n个整数(均大于等于0小于等于l),为每盏灯的坐标,多个路灯可以在同一点。

 

输出描述:

输出答案,保留两位小数。

 

输入例子:

7 15
15 5 3 7 9 14 0

 

输出例子:

2.50

 

思路:这题只要把起点和终点都加入第二行进行排序,然后求出最大相邻的差值D,所求d=D/2;注意保留2位小数输出,将求出double保留2位小数的一种方法为

         String remain_d = String.format("%.2f", original_d);

下面是java代码实现:

 1 package ustb.wangyi;
 2 import java.util.Arrays;
 3 
 4 public class StreetLamp {
 5     
 6     public static String getMinLightDist(int lampNum, int streetLen, int[] lampCoord) {
 7     
 8         if (lampNum <= 0 || lampNum > 1000) {
 9             throw new RuntimeException("街道灯的个数不符合要求");
10         }
11         
12         if (streetLen <= 0 || streetLen > 1000000000) {
13             throw new RuntimeException("街道的长度不符合要求");
14         }
15     
16         if (lampNum != lampCoord.length) {
17             throw new RuntimeException("数组中灯的个数与输入的灯的个数不一致");
18         }
19         
20         for (int i = 0; i < lampCoord.length - 1; i++) {
21             if (lampCoord[i] < 0 || lampCoord[i] > streetLen) {
22                 throw new RuntimeException("数组中第" + i + "个灯的坐标不符合要求");
23             }
24         }
25         
26         
27         Arrays.sort(lampCoord);
28         int maxAdjaDist = lampCoord[1] - lampCoord[0]; //初始化灯的最大相邻距离
29         
30         for (int i = 1; i < lampCoord.length - 1; i++) {
31             int temp = lampCoord[i+1] - lampCoord[i];
32             if (temp > maxAdjaDist)
33                 maxAdjaDist = temp;
34         }
35         
36         //计算第一盏灯与街道起点的距离 和街道终点与最后一盏灯的距离
37         int temp1 = lampCoord[0] - 0;
38         int temp2 = streetLen - lampCoord[lampCoord.length - 1];
39         maxAdjaDist = Math.max(maxAdjaDist, temp1);
40         maxAdjaDist = Math.max(maxAdjaDist, temp2);
41     
42         double d = (double) maxAdjaDist / 2.0;
43         String s =String.format("%.2f", d);
44         return s;
45     
46     }
47     
48     public static void main(String[] args) {
49         
50         int[] lampCoord = {15, 5, 3, 7, 9, 14, 0};
51         int streetLen = 15;
52         int lampNum = 7;
53         String d = getMinLightDist(lampNum, streetLen, lampCoord);
54         System.out.println(d);
55     }
56     
57 
58 }