Ссылка на оригинальную статью
Ссылка на e-olymp
Ссылка на Try Haxe!
Задача
Папа Карло подарил Буратино 1 доллар в его первый день рождения, а экономный Буратино сложил подарок в банку. Каждый последующий год папа Карло удваивал свой предыдущий подарок и прибавлял к нему столько долларов, сколько лет исполнилось Буратино, а тот в свою очередь продолжал складывать баксы в банку. На какой $N$-й день рождения в банке будет не менее, чем $S$ долларов?
Входные данные
Единственное число — значение $S$ ([latex]1 \le S \le 240[/latex]).
Выходные данные
Искомое значение $N$.
Тесты
Входные данные | Выходные данные |
---|---|
15 | 3 |
25 | 4 |
9 | 3 |
99 | 5 |
199 | 6 |
333 | 7 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Main { static function main() { var s, sum, p, n; s = Std.parseInt(Sys.stdin().readLine()); sum = 1; p = 1; n = 1; while (s > sum) { n++; p = p * 2 + n; sum += p; } Sys.stdout().writeString(Std.string(n)); } } |
Решение
В данной задаче $sum$ — сколько долларов в банке, $p$ — сколько долларов Папа Карло подарил Буратино. Пока $s > sum$ мы инкрементируем $n$ и считаем сколько Папа Карло подарит Буратино $p = p * 2 + n$ и суммируем его с тем что лежит в банке — $sum += p$. После этого в выходной поток подаётся $n$.