是否可以将任何给定数字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
提前致谢
答案 0 :(得分:0)
可以使用类似动态编程的想法来做到这一点。
我所做的可归纳为:
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
根据您的需要,您可以非常轻松地修剪它。