Как найти все возможные способы сложения номера? - PullRequest
0 голосов
/ 03 декабря 2018

Скажи, что у меня есть целое число.Любое целое числоПроизвольный пример: 6.

Есть ли чистый способ сделать сетку, возможно, всеми возможными способами, чтобы добраться до 6 в определенном диапазоне?

Скажите 1-9.

Если у меня есть 6, как я могу получить массив 5+1, 2+4, 3+3, 9-3, 7-1, 8-2 и т. Д .?

Возможно, результат может выглядеть как

[5,1],[2,4],[3,3],[9,3] и т. Д.

На самом деле все в порядке, я могу поэкспериментировать с выводом после того, как найду способ на самом деле вернуться к возвращению такого типа функции.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018
# checks for valid tuple
def valid_tuple(min_val, max_val, x):
    i,j = x
    return i>=min_val and i<=max_val and j>=min_val and j<=max_val

def combinations(sum_val, max_val, min_val):
    result =  [(i, sum_val-i) for i in range(min_val, max_val)]
    result = filter(lambda x: valid_tuple(min_val, max_val, x) , result)
    return list(result) 

combinations (6, 9,0)
# [(0, 6), (1, 5), (2, 4), (3, 3), (4, 2), (5, 1), (6, 0)]  
0 голосов
/ 03 декабря 2018

Вы можете сделать

import math

def get_combinations(number, minimum, maximum):
    ret = []
    for x in range(minimum, math.ceil(number/2)):
        ret.append((x, number - x))
    for x in range(maximum - number):
        ret.append((maximum - x, maximum - (number + x)))
    return ret

, который возвращает list из tuple с.

Давайте пройдемся по:

ret = []

Это просто определениемассив, который нужно вернуть, чтобы мы могли добавить к нему материал.

for x in range(minimum, math.ceil(number/2)):

Цикл всех возможных комбинаций добавка .То, что это делает, проходит через этот список:

(1, x-1), (2, x-2), ..., (n, x-n)

Однако, он учитывает только половину числа (округляется в большую сторону);это нормально, потому что для наших целей (1, 6) и (6, 1) одинаковы, и мы не должны включать оба.

ret.append((x, number - x))

Это просто представление Python для (n, x-n).

for x in range(maximum - number):

Цикл всех возможных вычитающих комбинаций. Этот проходит через этот список:

(maximum, maximum - x), (maximum - 1, maximum - (x + 1)), ..., (maximum - n, maximum - (x + n))

Вперед!

ret.append((maximum - x, maximum - (number + x)))

Опять же, только представление Python для (maximum - n, maximum - (x + n)).

return ret

И наконец, верните заполненный список.

...