From b0c64846ba9c8ab3334f600c52ac91faf9ab579f Mon Sep 17 00:00:00 2001 From: ialina07 Date: Thu, 9 Oct 2025 20:01:06 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D1=8E=D1=8E=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D0=BF=D0=BE=20=D0=BE?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D1=8E=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20=D0=B2=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B8=20=D1=81?= =?UTF-8?q?=20PEP8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework5-code_style/exchange_of_coins.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/homework5-code_style/exchange_of_coins.py diff --git a/src/homework5-code_style/exchange_of_coins.py b/src/homework5-code_style/exchange_of_coins.py new file mode 100644 index 0000000..77d0dfc --- /dev/null +++ b/src/homework5-code_style/exchange_of_coins.py @@ -0,0 +1,57 @@ +def exchange(coins, target_sum): + """ + Функция для размена суммы target_sum с использованием монет из списка coins + Возвращает список монет для размена или '-42!', если размен невозможен + """ + # Создаем массив для хранения минимального количества монет для каждой суммы от 0 до target_sum + # Изначально все значения устанавливаем в бесконечность (недостижимое значение) + min_coins = [float("inf")] * (target_sum + 1) + + # Базовый случай: для суммы 0 нужно 0 монет + min_coins[0] = 0 + + # Заполняем массив min_coins для всех сумм от 1 до target_sum + for i in range(1, target_sum + 1): + # Перебираем все доступные монеты + for coin in coins: + # Если монета не превышает текущую сумму i + if coin <= i: + # Обновляем минимальное количество монет для суммы i: + # Берем минимум между текущим значением и + # значением для суммы (i - coin) + 1 монета + min_coins[i] = min(min_coins[i], min_coins[i - coin] + 1) + + # Если для суммы target_sum не найдено решение (значение осталось бесконечностью) + if min_coins[target_sum] == float("inf"): + # Возвращаем специальное значение, означающее невозможность размена + return ("-42!") + + # Восстанавливаем конкретные монеты, используемые для размена + res = [] # Список для хранения результата + i = target_sum # Начинаем с целевой суммы + + # Проходим от суммы target_sum обратно к 0, восстанавливая использованные монеты + while i > 0: + # Перебираем все монеты, чтобы найти, какая была использована + for coin in coins: + # Проверяем, соответствует ли текущее количество монет + # количеству для суммы (i - coin) + 1 + if min_coins[i] == min_coins[i - coin] + 1: + # Нашли монету, добавляем ее в результат + res.append(coin) + # Уменьшаем текущую сумму на номинал монеты + i = i - coin + # Прерываем внутренний цикл, переходим к следующей итерации + break + return res # Возвращаем список монет для размена + + +# Основная часть программы +coins = [5, 7, 10] # Доступные номиналы монет +target_sum = int(input("Введите сумму для размена: ")) # Считываем сумму размена с клавиатуры + +# Вызываем функцию размена +res = exchange(coins, target_sum) + +# Выводим результат +print("размен числа", target_sum, "монетами:", res) From 63d8e730dc60cb86c467bca176266cd2a984b5c3 Mon Sep 17 00:00:00 2001 From: ialina07 Date: Sat, 6 Dec 2025 18:22:35 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=9E?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework5-code_style/exchange_of_coins.py | 28 ++++--------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/src/homework5-code_style/exchange_of_coins.py b/src/homework5-code_style/exchange_of_coins.py index 77d0dfc..b7c5b30 100644 --- a/src/homework5-code_style/exchange_of_coins.py +++ b/src/homework5-code_style/exchange_of_coins.py @@ -4,54 +4,36 @@ def exchange(coins, target_sum): Возвращает список монет для размена или '-42!', если размен невозможен """ # Создаем массив для хранения минимального количества монет для каждой суммы от 0 до target_sum - # Изначально все значения устанавливаем в бесконечность (недостижимое значение) min_coins = [float("inf")] * (target_sum + 1) - - # Базовый случай: для суммы 0 нужно 0 монет min_coins[0] = 0 # Заполняем массив min_coins для всех сумм от 1 до target_sum for i in range(1, target_sum + 1): - # Перебираем все доступные монеты for coin in coins: - # Если монета не превышает текущую сумму i if coin <= i: - # Обновляем минимальное количество монет для суммы i: - # Берем минимум между текущим значением и - # значением для суммы (i - coin) + 1 монета min_coins[i] = min(min_coins[i], min_coins[i - coin] + 1) - # Если для суммы target_sum не найдено решение (значение осталось бесконечностью) + # Если для суммы target_sum не найдено решение if min_coins[target_sum] == float("inf"): - # Возвращаем специальное значение, означающее невозможность размена return ("-42!") # Восстанавливаем конкретные монеты, используемые для размена - res = [] # Список для хранения результата - i = target_sum # Начинаем с целевой суммы + res = [] + i = target_sum - # Проходим от суммы target_sum обратно к 0, восстанавливая использованные монеты while i > 0: # Перебираем все монеты, чтобы найти, какая была использована for coin in coins: - # Проверяем, соответствует ли текущее количество монет - # количеству для суммы (i - coin) + 1 if min_coins[i] == min_coins[i - coin] + 1: - # Нашли монету, добавляем ее в результат res.append(coin) # Уменьшаем текущую сумму на номинал монеты i = i - coin - # Прерываем внутренний цикл, переходим к следующей итерации break - return res # Возвращаем список монет для размена - + return res -# Основная часть программы coins = [5, 7, 10] # Доступные номиналы монет -target_sum = int(input("Введите сумму для размена: ")) # Считываем сумму размена с клавиатуры +target_sum = int(input("Введите сумму для размена: ")) -# Вызываем функцию размена res = exchange(coins, target_sum) -# Выводим результат print("размен числа", target_sum, "монетами:", res)