【发布时间】:2015-04-16 05:56:54
【问题描述】:
我需要找到所有可能的数字 1:8 组合,使得所有元素的总和等于 8 组合需要按升序排列。
例如
1 7
2 2 4
1 3 5
1 2 2 3
1 1 1 1 1 1 1 1
一个数字可以重复。但是组合一定不能.. 即 1 2 2 3 和 2 1 2 3 我需要升序的解决方案所以每个组合只有一种可能性
我在Find vector elements that sum up to specific number in MATLAB上尝试了一些在线建议的代码
VEC = [1:8];
NUM = 8;
n = length(VEC);
finans = zeros(2^n-1,NUM);
for i = 1:(2^n - 1)
ndx = dec2bin(i,n) == '1';
if sum(VEC(ndx)) == NUM
l = length(VEC(ndx));
VEC(ndx)
end
end
但它们不包括数字重复的可能性。
【问题讨论】:
-
作为一个起点,我会尝试把它变成一个矢量问题。您提到您可能有重复值,那么如何将数字组合视为 8 维向量。第一个分量是 1 的个数,第二个分量是 2 的个数,依此类推。所以集合 1, 1, 1, 2, 3 将是 因为它有三个 1、一个 2 和一个三。这种解决问题的方法会有所帮助,因为会有一些几何方式来思考问题,以避免必须计算所有可能性。
-
当然,有一个很重要的问题:您只是想找到加起来为 8 的值吗?或者您是否正在尝试编写一个程序,以便无论他们要求您使用什么数字,您都可以运行您的程序并生成正确的结果。
-
另外,如果@CortAmmon 对问题的回答是后者,那么数字列表有哪些限制?他们会一直积极吗?它们是否总是包含给定范围内的所有整数?
-
如果second answer 正确,OP 可以接受吗?如果没有,请告诉我如何解决!
标签: matlab