1

非常に簡単な例:

A=[100 250 300]

各組み合わせの合計が500 未満である限り、可能なすべての組み合わせを見つけるにはどうすればよいですか?

4

2 に答える 2

1

このコードは機能するはずです。結果は cell 配列に格納されます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 に答える