Юний садівник#248

Юний садівник (Розбір)

Аналіз алгоритму

Кількість листків справа від стебла дорівнює 1 + 2 + …. + n (дерево містить ярусів). Зліва від стебла число листків таке ж. І зверху ще один листок.

Кількість літрів води для поливу дорівнює числу листків у дереві. Воно дорівнює

1 + 2 * (1 + 2 + 3 + ... + n) = 1 + \frac{n(n + 1)}{2} * 2 = 1 + n(n + 1)
Малюнок дерева

Реалізація алгоритму

Здійснимо обчислення відповіді за вище наведеною формулою.

scanf("%d",&n);
res = n * (n + 1) + 1;
printf("%d\n",res);

Реалізація через вказівники

#include <stdio.h>

int *n, *res;

int main(void)
{
    n = new int;
    res = new int;

    scanf("%d",n);
    *res = *n * (*n + 1) + 1;
    printf("%d\n",*res);

    delete n;
    delete res;
    return 0;
}

Реалізація за допомогою класу

#include <stdio.h>

class Long
{
private:
    long long value;
public:
    Long(long long value = 0) : value(value) {}

    void Read(void)
    {
        scanf("%lld",&value);
    }

    void Print(void)
    {
        printf("%lld\n",value);
    }

    Long operator+ (long long x)
    {
        return value + x;
    }

    Long operator* (const Long &x)
    {
        return value * x.value;
    }
};

int main(void)
{
    Long n, res;
    n.Read();
    res = n * (n + 1) + 1;
    res.Print();
    return 0;
}

Java реалізація

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner con = new Scanner(System.in);
        int n = con.nextInt();
        int res = n * (n + 1) + 1;
        System.out.println(res);
    }
}

Python реалізація

n = int(input())
res = n * (n + 1) + 1
print(res)