Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2017 18:06:27

Enfoire
Зарегистрирован: 2017-04-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с acmp №317 - Подарки Деда Мороза

Никак не могу сдать. Время у задачи 0.5 - у меня 0.55 - 0.6. Подскажите, как ускорить?

Ириска весит X грамм, мандарин – Y грамм, пряник – Z грамм.
Требуется написать программу, которая определит, сколько различных вариантов подарков весом ровно W грамм может сделать Дед Мороз.

Входные данные:
четыре целых числа X, Y, Z и W (1 ≤ X, Y, Z ≤ 100, 1 ≤ W ≤ 1000)

Выходные данные:
целое число – количество вариантов подарков

 x, y, z, w = map(int, input().split())
count = 0
    
for i in range(0, w // x + 1):
    for j in range(0 , (w - (x * i)) // y + 1):
        if (w - (x * i + y * j)) % z == 0:
            count += 1
  
print(count)

Офлайн

#2 Май 30, 2017 19:03:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Задача с acmp №317 - Подарки Деда Мороза

Ваш алгоритм можно опимизировать, если вынести повторяющуюся математику из цикла и убрать дублирование кода

  x, y, z, w = map(int, input().split())
count = 0
    
for i in range(0, w // x + 1):
    rest = w - x * i
    for j in range(0 , rest // y + 1):
        if (rest - y * j) % z == 0:
            count += 1
  
print(count)



Офлайн

#3 Май 30, 2017 19:21:41

Enfoire
Зарегистрирован: 2017-04-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с acmp №317 - Подарки Деда Мороза

FishHook
Ваш алгоритм можно опимизировать, если вынести повторяющуюся математику из цикла и убрать дублирование кода
Укажите, пожалуйста, где именно повторяющиеся моменты и дублирование?

Офлайн

#4 Май 30, 2017 19:32:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Задача с acmp №317 - Подарки Деда Мороза

Enfoire
Укажите, пожалуйста, где именно повторяющиеся моменты и дублирование?
 for i in range(0, w // x + 1):
    for j in range(0 , (w - (x * i)) // y + 1):  #  w - x * i
        if (w - (x * i + y * j)) % z == 0:          # w - x * i  те же самые расчеты в цикле!

собственно, я же вам дал исправленный код выше



Отредактировано FishHook (Май 30, 2017 19:32:55)

Офлайн

#5 Май 30, 2017 19:36:33

Enfoire
Зарегистрирован: 2017-04-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача с acmp №317 - Подарки Деда Мороза

FishHook
Прошу прощения, глаз замылился уже. Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version