Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачей на python

Kabachok19 Мудрец (10090), на голосовании 1 месяц назад
Вот задача:Вот мой код:
x=int(input())
p=int(input())
y=int(input())
d=0
p=p/100+1
while x<y:
x=x*p
d+=1
print(d)

Из 6 тестов на сайте он проходит 5. Я знаю, что по условию надо отсекать дробную часть, но когда я это делаю через int(), у меня решается 4 из 6 тестов, что даже хуже чем без него.
Голосование за лучший ответ
Мудрец (10540) 2 месяца назад
Ваша проблема заключается в том, как округляются суммы, когда происходит отбрасывание дробной части копеек. Функция int() может не всегда правильно отбрасывать дробные части при увеличении суммы вклада, особенно если точность операций с плавающей запятой влияет на результат.

Для корректного решения задачи, вам нужно каждый год прибавлять проценты к вкладу и после этого отбрасывать дробную часть, не используя плавающую запятую в промежуточных вычислениях. Это можно сделать следующим образом:
  1. Использовать целые числа для хранения суммы вклада, процента и результата.
  2. Для прибавления процентов нужно использовать умножение, а затем отбрасывать дробную часть путем целочисленного деления.

Вот исправленный код:
 x = int(input())  # начальная сумма 
p = int(input()) # проценты
y = int(input()) # целевая сумма

d = 0 # счетчик лет

while x < y:
x = x + (x * p) // 100 # прибавляем проценты и отбрасываем дробную часть
d += 1

print(d)
Kabachok19Мудрец (10090) 2 месяца назад
Спасибо
Kabachok19Мудрец (10090) 2 месяца назад
Все равно решается только 4 из 6 тестов, один неправильный, а другой вообще говорить что время выполнения программы превысило 1 секунду, поэтому незачет
Мудрец (10540) Kabachok19, А так?
 x = int(input())  # начальная сумма 
p = int(input())  # проценты 
y = int(input())  # целевая сумма 
 
d = 0  # счетчик лет 
 
# Выполняем цикл, пока вклад меньше целевой суммы 
while x < y: 
    x += (x * p) // 100  # увеличиваем сумму и отбрасываем дробную часть копеек 
    d += 1 
 
print(d) 
 
Гошан Вайсберг Мыслитель (5614) 2 месяца назад
x = int(input())
p = int(input())
y = int(input())
d = 0
while x<y:
x += (x*p/100)//1
d += 1
print(d)
Похожие вопросы