将数字X拆分成组,使得它们的总和在Matlab中始终等于X

时间:2015-06-11 20:17:09

标签: matlab

是否可以将任何给定数字X分成组,使得它们的总和在matlab中总是等于X?

例如:将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

提前致谢

1 个答案:

答案 0 :(得分:0)

可以使用类似动态编程的想法来做到这一点。

我所做的可归纳为:

  • 创建一个查找表,了解如何将数字分解为2个数字
  • 循环first_number
  • 循环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

根据您的需要,您可以非常轻松地修剪它。