Садівник#10

Садівник (Розбір)

У цій задачі сказано, що у день посадки садівник повинен був використати відро води для кожного з дерев, в останній день \frac 1 N, в передостанній \frac 1 {N-1} і так далі. Тобто садівник поливає дерева такою кількістю води 1, \frac 1 2, \frac 1 3, ..., \frac 1 N. З цього випливає, що садівник повинен поливати дерева днів.

Нам не відомо в який день садівник почав поливати дерева, але ми знаємо, що він поливав дерева в останній день, та загалом використав не більше ніж \frac 1 2 відра води. Тому ми можемо підрахувати скільки днів садівник поливав дерева рухаючись з останнього дня.

Знаючи загальну кількість днів коли садівник планував поливати дерева () та кількість днів коли садівник поливав дерева ми можемо знайти , кількість днів які садівник пропустив.

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m = 0;
    cin>>n; // Зчитуємо кількість дерев 
    double v = 0;

    for (int i = n; i >= 1; --i) {
        v += 1.0 / i;
        if (v > 0.5) { // Переконаємось, що загальна кількість води не перевищує половину відра
            break;
        }

        m++; // Підрахуємо кількість днів у які садівник поливав дерева
    }

    cout<<n - m<<"\n";
}