Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2021, 13:18   #1
Huobase
 
Регистрация: 16.11.2021
Сообщений: 5
По умолчанию Задача на python

Есть
переменная 'a[n[]]', где n[0] - объем , n[1] - Коэффициент
Напишите код, который рассчитает объем v,
чтобы общий коэффициент был максимальным.


a = [[6, 12], [2, 25], [431, 150], [10, 100], [55, 41]
v = 70
Желательно, чтобы задача решалась при любых числах
Huobase вне форума Ответить с цитированием
Старый 17.11.2021, 12:31   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Huobase Посмотреть сообщение
Желательно, чтобы задача решалась при любых числах
Да, хорошо бы. Но где ваши попытки?
Arigato вне форума Ответить с цитированием
Старый 17.11.2021, 19:27   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Из такого описания не пойму смысл задачи. Почему в примере ответ 70, а не 431 (объем с самым большим коэффициентом) или 504 (сумма объемов с положительными коэффициентами)?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.11.2021, 11:39   #4
Huobase
 
Регистрация: 16.11.2021
Сообщений: 5
По умолчанию

Arigato,
Код:
a  = [[6, 12], [5, 2], [2, 10], [10, 100], [4, 12], [18, 9], [38, 152]]
a3 = [[6, 12], [5, 2], [2, 10], [10, 100], [4, 12], [18, 9], [38, 152]]
v = 20
a2 = []
sump = 0
a1 = [i[1] / i[0] for i in a]
while v > 0:
    m = max(a1)
    maxj = a1.index(m)
    if a[maxj][0] < v:
        sump += a1[maxj] * a[maxj][0]
        v -= a[maxj][0]
        a[maxj][0], a[maxj][1] = 0, 0
        a1[maxj] = 0
    else:
        sump += a1[maxj] * v
        a[maxj][0] = v
        v = 0
for k in range(len(a)):
    if a[k][0] == 0:
        a2.append(a3[k][0])
    elif a[k][0] != a3[k][0]:
        a2.append(a[k][0])
    else:
        a2.append(0)
print(a2)
print(sump)
Вот что получилось, но мне было бы интересно узнать, как можно упростить, или по-другому решить задачу

BDA, V это не ответ это максимальный объем который можно использовать, если интересно можете посмотреть тот код который я выше написал

Последний раз редактировалось BDA; 20.11.2021 в 19:41.
Huobase вне форума Ответить с цитированием
Старый 20.11.2021, 19:39   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вот теперь стало понятно. Похоже, это задача о рюкзаке в чуть другой формулировке. А вы реализовали жадный алгоритм, который дает приближенное решение. По вашему коду: если будет дан объем больше суммы всех объемов, то код зациклится; мне кажется, что "обрезать" последний объем неверно. Если просто упрощать ваш код, то сразу бы отсортировал, а потом суммировал:
Код:
a  = [[6, 12], [5, 2], [2, 10], [10, 100], [4, 12], [18, 9], [38, 152]]
v = 20

a2 = [0] * len(a)
sump = 0

for k, v1, k1, i in sorted([(i[1] / i[0], i[0], i[1], j) for j, i in enumerate(a)], reverse = True):
    if v1 <= v:
        sump += k1
        a2[i] = v1
        v -= v1
    else:
        sump += k * v
        a2[i] = v
        break

print(a2)
print(sump)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.11.2021, 14:47   #6
Huobase
 
Регистрация: 16.11.2021
Сообщений: 5
По умолчанию

BDA, Спасибо за помощь, я думал о том как от цикла избавиться, но не получалось, теперь, посмотрев на ваш код, стало намного понятнее.
Huobase вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Python с массивами Hanami00101 Python 0 18.05.2020 19:22
Задача по Python makskovalko Python 2 23.09.2014 10:07
Задача с массивом (Python) BaceK Помощь студентам 0 30.11.2010 21:32