#include<stdio.h>
#include<stdlib.h>//包含快速排序的头文件
#include<math.h>//数学函数头文件
double length(double r)//将R转换成有效值
{
return 2 * sqrt((double)(r * r - 1)); 此处不理解 请大神解释 为什么要减1
}
int com(const void *a,const void *b)//快速排序比较函数
{
return (*(double *)b - *(double *)a > 0 ? 1 : -1);//从大到小排序
}
int main()
{
int m,n,i,j = 0;//j统计满足>1的装置个数
double r[1020],temp,sum=0.0;//存储每个满足条件的可湿润范围
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
for(i = 0,j = 0; i < n; i ++)
{
scanf("%lf",&temp);
if(temp > 1) //因为草坪的宽度为2米 所以舍弃半径小于等于1的装置
r[j++] = length(temp);
}
qsort(r,j,sizeof(r[0]),com); //qsort排序函数:r为要排序的数组、j为要排序的数组的长度、sizeif(r[0])为数组元素的大小(一个字节为单位)
//com为上面定义的判断大小函数的指针,需要自己定义
//for(i = 0; i < j; i ++)测试用
// printf("%.2f ",r[i]);
for(i = 0,sum = 0;i < j; i ++){
sum += r[i]; //sum存储装置所能湿润的长度
if(sum >= 20) //如果sum大于或等于20,说明已经湿润完毕
break;
}
printf("%d\n",i + 1);
//输出时加1,对应和i的关系,假如i=0是即退出循环,说明1个装置即可完成任务,此时可以看出需要装置个数和i之间的关系
}
system("pause");
return 0;
}
- 1 回答
- 0 关注
- 969 浏览
添加回答
举报
0/150
提交
取消