1. 程式人生 > >每天一個小題目——噴水裝置

每天一個小題目——噴水裝置

題目描述
小賽家有一塊草坪,長為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; }