我需要打印出列表中n个索引的元素,这些元素相乘后等于给定的整数。保证在列表中存在这样的组合。例如,对于以下输入(数组中的元素数量,所需乘积,所需子列表中的元素数量和给定的数组):
7 60 4 30 1 1 3 10 6 4
我应该以任何顺序得到:
1 2 4 5
因为1 * 1 * 10 * 6 == 60。如果有多个解决方案,我需要打印其中任何一个。我的解决方案有效,但速度很慢,如何使其更快?
7 60 4 30 1 1 3 10 6 4
我应该以任何顺序得到:
1 2 4 5
因为1 * 1 * 10 * 6 == 60。如果有多个解决方案,我需要打印其中任何一个。我的解决方案有效,但速度很慢,如何使其更快?
from itertools import chain, combinations
arr = list(map(int, input().split()))
numbers = list(map(int, input().split()))
s = sorted(numbers)
def filtered_sublists(input_list, length):
return (
l for l in all_sublists(input_list)
if len(l) == length
)
def all_sublists(l):
return chain(*(combinations(l, i) for i in range(len(l) + 1)))
def multiply(arr):
result = 1
for x in arr:
result = result * x
return result
def get_indexes(data):
indexes = []
for i in range(len(data)):
if arr[1] == multiply(data[i]):
for el in data[i]:
if numbers.index(el) in indexes:
all_ind = [i for i, x in enumerate(numbers) if x == el]
for ind in all_ind:
if ind not in indexes:
indexes.append(ind)
break
else:
indexes.append(numbers.index(el))
break
return indexes
sublists = list(filtered_sublists(numbers, arr[2]))
print(*get_indexes(sublists))