e-olymp 7367. Спортсмен

Задача

Спортсмен в первый день пробежал 10 км. Каждого следующего дня он увеличивал норму на 10% от нормы предыдущего дня. Опредилить через какое найменьшее количество дней спортсмен пробежит сусмарный путь не меньший чем [latex]N[/latex] км.

Входные данные

Целое число [latex]N (0 < N≤ 1000)[/latex].

Выходные данные

Единственное число – количество дней.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 9 1
2 45 4
3 324 16
4 1234 28
5 213213123 153

Код программы №1 (с использованием цикла):

Решение задачи:

Сначала вводим 4 переменные: [latex] k=1 [/latex] ( количество дней ), [latex] T=10 [/latex] ( количество километров которое спортсмен пробежал ), [latex] N [/latex] ( количество километров которое спортсмен должен пробежать ) и [latex] S [/latex] ( количество километров которое спортсмен пробегает в день ). Цикл каждый раз будет прибавлять к расстоянию которое пробежал спортсмен, количество километров которое спортсмен должен пробежать в течение следующего дня, с учетом того, что каждый день он будет пробегать на [latex] 10 [/latex] процентов больше, чем в прошлый день, параллельно увеличивая количество дней, пока [latex] N [/latex] будет больше [latex] T [/latex]. Если же [latex] N [/latex] при вводе изначально будет меньше [latex] T [/latex], то программа выведет, что спортсмену достаточно одного дня.

  • Время срабатывания программы при [latex]N = 1000[/latex] : [latex]65[/latex] [latex]ms[/latex]

 

Ссылки

  • Задача на сайте e-olymp
  • Код решения в Ideone

Код программы №2(с использованием линейных вычислений):

Решение задачи:

Также данную задачу можно решить с помощью формулы геометрической прогрессии [latex]S=\frac{b_1(q^n-1)}{q-1}[/latex] из которой нам нужно будет выразить степень [latex] n [/latex] через логарифм при условии того, что по условию задачи мы знаем, что [latex] q=1.1 [/latex] и [latex] b_1=1 [/latex]. И мы получаем, что [latex] \left(n=\log_{1.1}\left(\frac{s}{100}+1\right)\right) [/latex]. При записи логарифма по основанию в С++ мы пользуемся основным свойством логарифмов: [latex] \log_{a}\left(b\right)=\frac{\log_{c}\left(b\right)}{\log_{c}\left(a\right)} [/latex]. Также используем функцию сeil, которая округлит выходное число вверх, до ближайшего целого. ( [latex] S [/latex] — количество километров, которое должен пробежать спортсмен ).

  • Время срабатывания программы при [latex]N = 1000[/latex] : [latex]76[/latex] [latex]ms[/latex]

Ссылки

Related Images:

15 thoughts on “e-olymp 7367. Спортсмен

  1. У Вас есть орфографические ошибки, и запятых тоже не хватает.
    Переменные и формулы следует оформлять в окружении Latex. Например, $N$, $T=10$ .
    Дроби оформляют так — $S=\frac{a+b}{c+d}$

    • Google сообщил, что это — $(n=log1.1(s/100+1))$ нужно кодировать в latex так — $\left(n=\log_{1.1}\left(\frac{s}{100}+1\right)\right).$ А это $b1=1$ так — $b_1=1.$
    • Это «N (0 < N≤ 1000)» тоже формула latex. И даже это — «N».
    • Вы программируете не ту формулу, которую написали. Забыли выполнить переход к натуральному логарифму в объяснении. А в коде он есть.
    • Нужно сделать правильные отступы в коде.
    • Перед открывающими скобками нужно ставить пробел. И пробел должен быть в тексте, а не в формуле, где он игнорируется.
    • С какой целью Вы привели решение с использованием циклов? Конечно, можно заменить деление циклом вычитания, но зачем?
    • Все эти class=»eo-paper__header» и style=»height: 134px» border=»1″ width=»353″ нужно безжалостно удалить. Нужен заголовок — пишите h1. Нужен подзаголовок — пишите h2. Какой будет цвет и размер дело дизайнера сайта, а не автора одной из его страничек. Вы специалист по контенту.
    • Уберите кириллицу «спортсмен» из постоянной ссылки публикации.
    • Где метки?
    • Так же, хочу заметить, что я привел решение с использованием циклов потому, что мне кажется, что задача с помощью них решается легче, да и сама программа работает чуть быстрее.

    • Т.е. по Вашим измерениям 3000 операций в варианте с циклом работают быстрее? Всё может быть.
      Хорошо. Пожалуйста, познакомьтесь, с этой функцией и измерьте время работы в обоих случаях.

    • Я не совсем правильно сформулировал. Чуть быстрее среднее время срабатывания задачи на eolymp.

  2. Вы так и не исправили отступы в коде
    У вас странная формула для основного свойства логарифмов в правой части. И в ней также не использовали команду для логарифма $\log$

    • Извиняюсь за то, что поздно взялся за задание. Я исправил все, что говорили вы и Евгения Викторовна. Сейчас должно быть все нормально.

      • Вам не за что извиняться. Вы можете работать в удобном для себя темпе. Правда, у деканата может быть другое мнение.
      • К сожалению, Вы не все исправили. Например, мы оба Вам объясняли, как записывать логарифм в latex. Но Вы исправили только в одном месте. Нужно исправить везде. Аналогично и с отступами, сравнением времени работы программ, метками (ключевыми словами) и пр.
      • Обе ссылки на ideone.com ведут на один и тот же код. И там плохие отступы.
  3. Странно. Я наверное пишу мелкими буквами 🙂
    Давайте не будем исправлять сразу много замечаний.
    1. Найдите строку с номером 13 в Вашем первом коде.
    2. Установите курсор перед закрывающей фигурной скобкой.
    3. Умелой манипуляцией клавишами Backspace и пробела добейтесь, чтобы фигурная скобка оказалась строго над первой буквой «с» в следующей 14-й строке.
    Если не будет получаться, свяжитесь со мной на Facebook — будем работать над этой проблемой вместе. Или обратитесь за консультацией к однокурсникам.

    Если вдруг всё быстро получится, переходите к следующему замечанию. Скопирую его сюда. Пожалуйста, познакомьтесь, с этой функцией и измерьте время работы в обоих случаях. Можно это делать только для $N=1000.$

    • Эх, жалко я свой комментарий не успел сохранить перед очередным падением сервера. Я пытался написать, что со временем работы программы уже разобрался. Оказалось, что для указанных значений цикл будет работать всего несколько десятков раз. Это вполне соизмеримо с вычислением логарифма разложением в ряд. Конечно, при росте $N$ циклический алгоритм будет работать всё дольше, а время работы логарифмического останется постоянным.
      Но не важно. Оставляем оба варианта. Больше баллов будет 🙂

  4. Хорошо, принято.
    Хотел поругать за слово «приплюсовывать», но оказалось он даже в словаре Ушакова есть. Хотя везде помечено, как разговорное. Лучше заменить на что-то соответствующее стилистике текста. Например, «увеличивать на».

Добавить комментарий