Условие
Папа Карло подарил Буратино [latex]1[/latex] доллар в его первый день рождения, а экономный Буратино сложил подарок в банку. Каждый последующий год папа Карло удваивал свой предыдущий подарок и прибавлял к нему столько долларов, сколько лет исполнилось Буратино, а тот в свою очередь продолжал складывать баксы в банку. На какой [latex]N[/latex]-й день рождения в банке будет не менее чем [latex]S[/latex] долларов?
Входные данные
Единственное число — значение [latex]S[/latex]. [latex]1\le S \le 240[/latex].
Выходные данные
Искомое значение [latex]N[/latex].
Задача взята с сайта e-olymp.
Тесты
Входные данные | Выходные данные |
15 | 3 |
25 | 4 |
9 | 3 |
99 | 5 |
199 | 6 |
333 | 7 |
56 | 5 |
478 | 8 |
809 | 8 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; int main() { long long s,sum=1,p=1,n=1; cin >> s; while (sum<s){ n++; p=p*2+n; sum += p; } cout << n; return 0; } |
Решение
В данной задаче [latex]sum[/latex] — сколько долларов в банке, [latex]p[/latex] — сколько долларов Папа Карло подарил Буратино. Пока [latex]sum<s[/latex] мы увеличиваем [latex]N[/latex] на [latex]1[/latex] и считаем сколько Папа Карло подарит Буратино [latex]p=p\cdot 2+n[/latex] и суммируем его с тем что лежит в банке [latex]sum=sum+p[/latex] или же как у меня что одно и тоже [latex]sum += p[/latex]. После этого выводим [latex]N[/latex].
Код программы
Засчитанное решение
Зачтено.
Мне сначала показалось, что можно всё представить как сумму геометрической прогрессии (удваивает) и арифметической (на 1 больше). Но я не учёл, что удваивается после увеличения на единицу.