1

一个非常简单的例子:

A=[100 250 300]

只要每个组合的总和小于 500 ,我如何找到所有可能的组合?

4

2 回答 2

1

这段代码应该可以工作。结果将存储在元胞数组中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);
于 2013-02-16T23:20:02.580 回答
0

这个简单的代码

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

于 2013-02-16T23:12:10.880 回答