题目描述
小赛家有一块草坪,长为20米,宽为2米,妈妈要他给草坪浇水,在草坪上放置半径为Ri的喷水装置,每个喷水装置可以给以它为中心的半径为实数Ri(1<Ri<15)的圆形区域浇水。他家有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润。你能帮他计算一下,把整个草坪全部湿润,最少需要几个喷水装置。
输入
输入第一个数字为喷水装置的个数n,后面n个数字分别为n个喷水装置的半径r,r表示该喷水装置能覆盖的圆的半径。
喷水装置i的范围为:1<i<600,半径的范围为:1<Ri<15。
样例输入
5
2 3.2 4 4.5 6
输出
输出所用装置的个数。
样例输出
2
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
cin >> n;
float *p = new float[n]; // 半径
float *d = new float[n]; // 有效覆盖距离
int t = 0; // 个数
for (int i = 0; i < n; ++i){
cin >> p[i];
d[i] = 2 * sqrt(p[i] * p[i] - 1);
}
float temp;
for (int i = 0; i < n-1; ++i)
for (int j = i+1; j < n; ++j)
if (d[i] < d[j]){
temp = d[i];
d[i] = d[j];
d[j] = d[i];
}
float sum = 0.0; // 浇水有效距离
for (int i = 0; i < n; ++i){
++t;
sum += d[i];
// cout << d[i];
if (sum > 20)
break;
}
delete [] p;
delete [] d;
cout << t;
return 0;
}