Задача взята с сайта e-olymp.com.
Условие задачи
Мама попросила Васю полить все молодые деревца в саду. Вася знает, что пока деревья маленькие, их надо очень хорошо поливать. А вот сколько поливать — неизвестно. Но Вася — очень умный мальчик. Он внимательно прочитал весь учебник ботаники для средней школы и выяснил, что полив прямо пропорционален количеству листьев на дереве. Для хорошего роста деревьев достаточно выливать под дерево ежедневно по одному литру воды на каждый лист.
К счастью Васи оказалось, что листья на деревьях растут ярусами, причем на верхнем ярусе два листа, на втором — четыре, на следующем — шесть, и так далее, на каждом последующем ярусе на два листа больше по сравнению с предыдущим. А на самой верхушке растет еще один листик. Хитрый Вася послал младшую сестренку Машеньку подсчитать количество ярусов на каждом дереве, а Вас просит написать программу, которая для каждого дерева вычислит количество литров воды для его полива.
Входные данные
Количество ярусов [latex] n (0 ≤ n ≤ 1000) [/latex] на дереве.
Выходные данные
Вывести количество литров воды для полива этого дерева.
Тесты
№ | Входные данные | Выходные данные |
---|---|---|
1. | 2 | 7 |
2. | 5 | 31 |
3. | 0 | 1 |
4. | 70 | 4971 |
Код программы
1 2 3 4 5 6 7 8 |
class Test { static function main() { var n = 2; var a1 = 2, d = 2, sum = 0; sum = Std.int(Math.pow(n,2) + n); trace(sum + 1); } } |
Решение
Как можно было заметить, по условию нашей задачи, на каждом следующем уровне на 2 листа больше чем на предыдущем. Поэтому для ее решения мы можем воспользоваться формулой суммы [latex]n[/latex]-первых членов арифметической прогрессии, и в конце расчетов добавить к полученной сумме единицу (тот самый листик с верхушки). Тогда подставив [latex] d = 2 , a_1 = 2, n = n [/latex]. Мы получим формулу [latex] S_n = \frac{2a_1 + (n — 1)d}{2} \cdot n \to n^2 + n [/latex].
Оригинальное решение: cpp.mazurok.com.
Рабочий код для тестирования на try.haxe.org: Try Haxe !
Для отправки комментария необходимо войти на сайт.