一个非常简单的例子:
A=[100 250 300]
只要每个组合的总和小于 500 ,我如何找到所有可能的组合?
这段代码应该可以工作。结果将存储在元胞数组中C
:
A = [100 250 300];
B = 500;
C = cell(0);
for i = 1:size(A,2)
D = nchoosek(A,i);
for j = 1:size(D,1)
if (sum(D(j,:)) < B)
C{end+1} = D(j,:);
end
end
end
或更紧凑:
A = [100 250 300];
B = 500;
C = cell(0);
for i = 1:size(A,2)
C = [C; num2cell(nchoosek(A,i),2)];
end
C = C(cellfun(@(x) sum(x), C) < B);
这个简单的代码
A=[100 250 300];
p = perms(A);
for nn = 1:numel(A)
p(sum(p(:,1:nn), 2) < 500, 1:nn)
end
给出以下输出
ans =
300
300
250
250
100
100
ans =
300 100
250 100
100 250
100 300
如果要删除重复项,例如 [300 100] 和 [100 300],只需使用sort
命令对值进行排序,然后您可以使用删除重复项unique