喷水装置(一)

喷水装置(一)

       
时间限制: 3000 ms  |            内存限制: 65535 KB
       
难度: 3
     

     

 

     

        描述       
现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实 数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择 尽量少的喷水装置,把整个草坪的全部湿润。       
 
       
          输入         
第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。         
输出         
输出所用装置的个数         
样例输入         
           
2
5
2 3.2 4 4.5 6 
10
1 2 3 1 2 1.2 3 1.1 1 2
                  
样例输出         
           
2
5

程序代码:
#include<iostream>
#include<math.h>
using namespace std;
int main(){
 int m,n;            
 cin>>m;
 while(m--){
  int i,j,tm=0;
  float r[601],x,s=10;  /    /这里s取10不取20是为下面得到的sqrt(r[i]*r[i]-1)不再乘2
  cin>>n;
  for(i=0;i<n;i++) cin>>r[i];         
  for(i=0;i<n;i++){   //使数组由大到小排列
   for(j=i;j<n;j++)     
    if(r[i]<r[j]){
     x=r[i];
     r[i]=r[j];
     r[j]=x;
    }
  }
  for(i=0;i<n;i++){
   s-=sqrt(r[i]*r[i]-1);  //由上图片分析可知,只要,求得连续的较大l圆L长度,并由s减去直到为零
   tm++;               //tm为计数器,用以输出需要多少喷水装置
   if(s<=0)break;    //进行分析判断满足要求条件
  }
  cout<<tm<<endl;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值