@ex3mpl

Как решить задачу на логику и математику в Python?

привет всем открывшим этот вопрос, спасибо вам за уделение времени
очень долго мучаюсь с одной нерешенной задачкой, никак не могу понять как к ней подступиться, через какую формулу решить и как ее вообще решить, поэтому прибегнул к просьбе о помощи тем, кто разбирается в этом гораздо лучше.

вот сама задача:

Напишите программу, которая поможет составить план тренировок для подготовки к марафону. Она получает на вход число километров на планируемом марафоне, сколько пользователь планирует пробежать в первый день тренировок и на сколько процентов планирует увеличивать каждый день это расстояние. На выходе программа должна выдавать, сколько дней пользователю потребуется для того, чтобы подготовиться пробежать целевое количество километров.

читал, что есть возможность сделать эту задачу через формулу суммы первых n-членов геометрической прогрессии, но ответ дается неправильный

пример ответа:

формат ввода:
12
3
10

формат вывода:
16

спасибо всем за оказанную помощь в решении заранее:)
  • Вопрос задан
  • 1093 просмотра
Решения вопроса 1
@kurrbanov
Пишу бэкенд на Питоне
Пусть,
n - кол-во км, которое нужно будет пробежать на марафоне.
s - кол-во км. на 1 тренировке.
p - кол-во. проц., на которое увеличивается s.

Составим мат. модель. Получим:
1 день: S
2 день: (1 + p/100) * S
3 день: (1 + p/100)^2 * S
...
Конечная формула: (1 + p/100)^k * s >= n; s >= 0, поэтому на него и делим. k - количество дней.
Получим: k = log 1+p/100(n/s) + 1. Прибавляем единицу, потому что ещё должны посчитать первый день.

Код:

import math

n = int(input())
s = int(input())
p = int(input())

ans = round(math.log((n / s), (1 + p / 100))) + 1

print(ans)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
b1 - километров в первый день
p - прирост в %
D - длина марафона
Решение:
1) Знаменатель прогрессии:
q = 1+p/100

2) Сумма первых членов прогрессии:
S = b1*(1-q^n)/(1-q)

S >= D

b1*(1-q^n)/(1-q) >= D

q^n >= 1-D*(1-q)/b1

log_q(q^n) >= log_q(1-D*(1-q)/b1)

n >= log_q(1-D*(1-q)/b1)
Ответ написан
Комментировать
@mr_Try
Решение с помощью циклов

S = int(input(""))
s0 = int(input(""))
perc = int(input(""))
day = 1

while S > s0:
    day += 1
    s0 = s0 + s0 * perc / 100
print(day, "дней")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы