Я знаю, как найти набор из двух чисел. Я могу сортировать все числа от 0 до X-1. Поместите указатель P1 на 0 и P2 на X-1 и для каждого шага, увеличьте P1 на 1 и уменьшите P2 на 1. Как мне найти все наборы из 4 чисел?Учитывая x, Как я могу найти все наборы из четырех чисел, которые добавляют до x
0
A
ответ
1
Один (из многих) простых решений: рекурсивная функция, которая генерирует одно число и использует другой вызов с измененным x для следующего. Псевдокод:
generate(x, digits, current[])
{
if digits < 1
print all current´s in one (single) line
return
for every i from 0 to x
add i as new element to current
generate (x - i, digits - 1, current)
remove the last element of current again
}
текущий - это список, массив и т. Д., Пустой при вызове в первый раз.
x - это число и цифры, например. 4 в первом вызове.
это то, что грубая сила всех комбинаций? – shole
@shole Да, это так. Но если вы хотите * все * комбинации (т. Е. Печатать каждый из них или что-то в этом роде), нет другого способа, кроме генерации * всех * комбинаций. (Если кому-то не нужны значения, просто сумма или значения, выполняющие некоторые циртерии и т. Д., Есть лучшие способы.) – deviantfan