本文主要是介绍每天一个小题目——路灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
路灯
- 题目描述
V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是多少?
#include<iostream>
using namespace std;void sort(int *x, int n){ // 先进行排序,方便计算两个相邻路灯的距离 int temp;for(int i = 0; i < n-1; ++i)for (int j = i+1; j < n; ++j)if (x[j] < x[i]){temp = x[i];x[i] = x[j];x[j] = temp;}
}double calculate(int *x, double *y, int n, int l){ // 确定每一个路灯到边界或者相邻路灯的距离 double max;y[0] = x[0];max = y[0];for (int i = 0,j = 1; i < n-1, j < n; ++i,++j){y[j] = (x[j] - x[i]) / 2.0;if (y[j] > max)max = y[j]; }y[n] = l - x[n-1];max = max > y[0] ? max : y[0];max = max > y[n] ? max : y[n];return max;
}int main()
{int n , l;cin >> n >> l;int *p = new int[n]; // 存储路灯坐标 for (int i = 0; i < n; ++i)cin >> p[i];sort(p,n);double *q = new double[n+1]; // 存储路灯之间的距离printf("%.2lf\n",calculate(p,q,n,l));delete [] p;delete [] q;return 0;
}
这篇关于每天一个小题目——路灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!