第3题:照亮道路问题
1.题目
有一条可以视为线段的街道,长度为L,其中有n个路灯,每个 路灯能照亮的半径都是相同的,求最小的照亮半径r使得整条 街道上的每一个点都能被照亮
2.要点分析
这个照亮道路的问题,其实就是,用一个数组进行数据承接,然后算出排序后的相邻两个数据差值,并且找到最大值,然后把这个值和(道路开头与第一个坐标的差值),以及(道路结尾与倒数第一个点的距离)相比较,从而得到最大的数据,这便是这个题目的解题思路。
3.代码
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
int main()
{
int n;
double L;//改变了类型
cin >> n >> L;
vector<double>a;
//用容器输入基本的信息
for (int i = 0; i < n; i++)
{
double b;
cin >> b;
a.push_back(b);
}
//下面使用冒泡排序
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[i] > a[j])
{
double temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
double max = a[1] - a[0];
for (int i = 1; i < n - 1; i++)
{
if (a[i + 1] - a[i] > max)
{
max = a[i + 1] - a[i];
}
}
max = max / 2;
if (L - a[n - 1] > max)
{
max = L - a[n - 1];
}
if (a[0] > max)
{
max = a[0];
}
cout << setiosflags(ios::fixed) << setprecision(2) << max<< endl;
}
在这里这个题目的基本就已经解决完毕。