Вероятно, не лучший подход, но он должен работать.
Определите количество комбинаций из трех чисел, которые составляют 8:
1,1,6
1,2,5
1,3,4
2,2,4
2,3,3
Чтобы найти вышесказанное, я начал с:
6,1,1 then subtracted 1 from six and added it to the next column...
5,2,1 then subtracted 1 from second column and added to next column...
5,1,2 then started again at first column...
4,2,2 carry again from second to third
4,1,3 again from first...
3,2,3 second -> third
3,1,4
зная, что меньше половины - это 2, все комбинации должны быть найдены ... но так как список не длинный, мы могли бы также пойти до конца.
Теперь сортируйте каждый список из 3 от наибольшего к наименьшему (или наоборот)
Теперь отсортируйте каждый список из 3 относительно друг друга.
Скопируйте каждый уникальный список в список уникальных списков.
Теперь у нас есть все комбинации, которые добавляют к 8 (думаю, пять списков).
Теперь рассмотрим список в указанном выше наборе
6,1,1 все возможные комбинации находятся по:
8 выбор 6, (так как мы выбрали шесть, остается только 2, чтобы выбрать из) 2 выбора 1, 1 выбор 1
который работает до 28 * 2 * 1 = 56, стоит знать, сколько существует возможностей, чтобы вы могли проверить.
n выберите r (выберите r элементов из n вариантов)
n C r = n! / [(н-р)! r!]
Итак, теперь у вас есть общее количество итераций для каждого компонента списка, для первого - 28 ...
Выбор 6 элементов из 8 - это то же самое, что создать список из 8 минус 2 элементов, но какие два элемента?
Хорошо, если мы удалим 1,2, то получится 3,4,5,6,7,8. Давайте рассмотрим все группы по 2 ... Начиная с 1,2, следующая будет 1,3 ... так что следующее читается столбец за столбцом.
12
13 23
14 24 34
15 25 35 45
16 26 36 46 56
17 27 37 47 57 67
18 28 38 48 58 68 78
Суммирование каждого из приведенных выше столбцов дает нам 28. (таким образом, это охватывало только первую цифру в списке (6,1,1), повторите процедуру для второй цифры (1), которая равна «2 Выберите 1» слева от двух цифр из приведенного выше списка мы выбираем одну из двух, а затем в качестве последней выбираем оставшуюся.
Я знаю, что это не детальный алгоритм, но я надеюсь, что вы сможете начать.