2015-03-27 1 views
0

Я знаю, как найти набор из двух чисел. Я могу сортировать все числа от 0 до X-1. Поместите указатель P1 на 0 и P2 на X-1 и для каждого шага, увеличьте P1 на 1 и уменьшите P2 на 1. Как мне найти все наборы из 4 чисел?Учитывая x, Как я могу найти все наборы из четырех чисел, которые добавляют до x

ответ

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 в первом вызове.

+0

это то, что грубая сила всех комбинаций? – shole

+0

@shole Да, это так. Но если вы хотите * все * комбинации (т. Е. Печатать каждый из них или что-то в этом роде), нет другого способа, кроме генерации * всех * комбинаций. (Если кому-то не нужны значения, просто сумма или значения, выполняющие некоторые циртерии и т. Д., Есть лучшие способы.) – deviantfan