1. 程式人生 > >ACM給小草澆水

ACM給小草澆水

題目描述

一天,小劉在操場散步,看見旁邊一塊矩形草坪上有幾個噴頭在給小草澆水,她發現有些小草沒有澆到水,小劉平時愛護一草一木,她想讓小草都能澆到水,可是一時又想不到好的解決辦法,聰明的你來幫幫她吧。(現有一塊草坪,長為20米,寬為2米,要在橫中心線上放置半徑為Ri的噴水裝置,每個噴水裝置的效果都會讓以它為中心的半徑為實數Ri(0<Ri<15)的圓被溼潤,這有充足的噴水裝置i(1<i<600)個,並且一定能把草坪全部溼潤,你要做的是:選擇儘量少的噴水裝置,把整個草坪的全部溼潤。)

int main()
{
    int m,i,n,j;
    double a[100],s,t;//a陣列定義為double型,因為半徑不一定為整數
    while(~scanf("%d",&m))//多組輸入
    {  while(m--)
        {scanf("%d",&n);s=0;
        for(i=1;i<=n;i++)
        {
            scanf("%lf",&a[i]);
        }
        for(i=1;i<n;i++)
            for(j=i;j<=n;j++)//給每個半徑排序,按從大到小,先選大的
        {
            if(a[i]<a[j])
            {
                t=a[i];a[i]=a[j];a[j]=t;
            }
        }
        for(i=1;i<=n;i++)// 依次相加每一個半徑。注意 是半徑。
        {s=(s+a[i]);
         if(s>10)/*//必須大於10,因為s是半徑和。所以即直徑需要大於20。不能等於,等於則會有一部分無法覆蓋*/
             break;

        }
        printf("%d\n",i);
    }
    }
}