2015-06-11 3 views
0

Можно ли разбить любое заданное число X на группы так, чтобы их сумма всегда была равна X в matlab?Разбиение числа X на группы так, что их сумма всегда равна X в Matlab

, например: Расщепление 11 на группы по 4, выходной сигнал должен давать

(8,1,1,1) (7,2,1,1) (6,3,1,1) (6,2,2,1) (5,4,1,1) (5,3,2,1) (5,2,2,2) (4,4,2,1) (4,3,2 , 2) (4,3,3,1) (3,3,3,2)

сумма чисел в каждой группе в каждом случае 11

заранее спасибо

ответ

0

Один может сделать это с помощью идеи, связанной с динамическим программированием.

Что я могу резюмировать:

  • Создать таблицу поиска для того, как число можно разложить на 2 номера
  • Цикл по first_number
  • Loop над second_number
  • Посмотрите на как 11 - first_number - second_number можно разделить, используя таблицу поиска
  • Распечатать все такие возможности

Код:

%Create Loookup Table 
for it=1:11 
    for jt=1:11 
     A(it,jt) = it+jt; 
    end 
end 

%Find Permutations 
my_perms = []; 
for it=1:8 
    for jt=1:8 
     [my_row,my_col] = ind2sub([11,11],find(A==11-it-jt)); 
     num = size(my_row,1); 
     my_perms = [my_perms; [it*ones(num,1) jt*ones(num,1) my_row my_col]]; 
    end 
end 
disp(my_perms) 

Выход:

1  1  8  1 
1  1  7  2 
1  1  6  3 
1  1  5  4 
1  1  4  5 
1  1  3  6 
1  1  2  7 
1  1  1  8 
1  2  7  1 
1  2  6  2 
1  2  5  3 
1  2  4  4 
1  2  3  5 
1  2  2  6 
1  2  1  7 
1  3  6  1 
1  3  5  2 
1  3  4  3 
1  3  3  4 
1  3  2  5 
1  3  1  6 
1  4  5  1 
1  4  4  2 
1  4  3  3 
1  4  2  4 
1  4  1  5 
1  5  4  1 
1  5  3  2 
1  5  2  3 
1  5  1  4 
1  6  3  1 
1  6  2  2 
1  6  1  3 
1  7  2  1 
1  7  1  2 
1  8  1  1 
2  1  7  1 
2  1  6  2 
2  1  5  3 
2  1  4  4 
2  1  3  5 
2  1  2  6 
2  1  1  7 
2  2  6  1 
2  2  5  2 
2  2  4  3 
2  2  3  4 
2  2  2  5 
2  2  1  6 
2  3  5  1 
2  3  4  2 
2  3  3  3 
2  3  2  4 
2  3  1  5 
2  4  4  1 
2  4  3  2 
2  4  2  3 
2  4  1  4 
2  5  3  1 
2  5  2  2 
2  5  1  3 
2  6  2  1 
2  6  1  2 
2  7  1  1 
3  1  6  1 
3  1  5  2 
3  1  4  3 
3  1  3  4 
3  1  2  5 
3  1  1  6 
3  2  5  1 
3  2  4  2 
3  2  3  3 
3  2  2  4 
3  2  1  5 
3  3  4  1 
3  3  3  2 
3  3  2  3 
3  3  1  4 
3  4  3  1 
3  4  2  2 
3  4  1  3 
3  5  2  1 
3  5  1  2 
3  6  1  1 
4  1  5  1 
4  1  4  2 
4  1  3  3 
4  1  2  4 
4  1  1  5 
4  2  4  1 
4  2  3  2 
4  2  2  3 
4  2  1  4 
4  3  3  1 
4  3  2  2 
4  3  1  3 
4  4  2  1 
4  4  1  2 
4  5  1  1 
5  1  4  1 
5  1  3  2 
5  1  2  3 
5  1  1  4 
5  2  3  1 
5  2  2  2 
5  2  1  3 
5  3  2  1 
5  3  1  2 
5  4  1  1 
6  1  3  1 
6  1  2  2 
6  1  1  3 
6  2  2  1 
6  2  1  2 
6  3  1  1 
7  1  2  1 
7  1  1  2 
7  2  1  1 
8  1  1  1 

В зависимости от ваших потребностей, вы можете подрезать это очень легко.

Смежные вопросы