解题思路:
此题为贪心题,先声明一个数组r[601],用来存放喷水装置的喷射半径r,对喷水装置的半径进行排序,然后求出dis,dis= 2*sqrt(r*r - bw * bw),其中bw为草坪宽的二分之一,如果r[i] >1则进行dis相加,否则不进行,知道所给喷水装置的dis之和 大于草坪的长度, 输出计数变量count
如下图:
AC代码:
# include <stdio.h>
# include <algorithm>
# include <math.h>
using namespace std;
int cmp(double a, double b)
{
return a > b;
}
int main(void)
{
int n;
scanf("%d", &n);
while (n--)
{
int num;
double in[601];
double allsum = 0.0;
double dis = 0.0;
int count = 0;
int i;
scanf("%d", &num);
for (i = 0; i < num; i++)
{
scanf("%lf", &in[i]);
}
sort(in, in + num, cmp);
i = 0;
while (allsum - 20.0 < 0.000001)
{
dis = 2 * sqrt(in[i] * in[i] - 1);
i++;
count ++;
allsum += dis;
}
printf("%d\n", count);
}
return 0;
}