2015-12-23 5 views
-2

У меня есть список из 1000 целых чисел, и я хочу, чтобы целочисленное значение было самым близким к 1000 для суммы любой возможной комбинации целых чисел из списка.Комбинированное положительное целое число меньше или равно

Для [900,500,498,4,8,10,600] ожидаемый результат будет 1002, потому что 500 + 498 + 4 = 1002.

+0

не сумма ближе к 1000. Для Примеру 498 + 500 + 4 = 1002 –

+0

Как Закрыть это должно быть? ... –

+0

Вы должны изменить свой вопрос и более четко определить, что _exactly_ вам нужно. Например, почему бы не «500 + 498», оно равно близко к 1000 как «500 + 498 + 4». – Chriki

ответ

1

Я предполагаю, что 500 + 498 = 998 является таким же правильным ответом, как и 1002 для вашего примера, потому что оба эти числа одинаково близки к 1000, и вы просто пропустили это. Если вы ищете максимальное значение, если есть два возможных решения, это простое исправление.

from itertools import combinations, chain 

lst = [900, 500, 498, 4, 8, 10, 600] 
c = chain(*(list(combinations(lst, i)) for i in range(1, len(lst) + 1))) 
result = min(c, key = lambda x: abs(sum(x) - 1000)) 
print(sum(result)) # 998 
+0

ty :) как я должен делать, если бы я запустил whant 1002? –

+0

@Vilgot_Puff Вы можете изменить 'abs (sum (x) - 1000)' to '(abs (sum (x) - 1000), -sum (x))' – timgeb

+0

да пробовал это, но он просто дает синтаксическую ошибку .. –

Смежные вопросы