在matlab中查找所有可能的排列/组合以等于特定总和

时间:2016-06-24 21:11:04

标签: algorithm matlab combinations

我被要求解决这个简单的问题,而我的编程技巧非常糟糕。在这里,

鉴于以下项目,找到所有服装项目的组合,以便总成本正好是100美元。

这是我的代码:

tshirt=20; %price of tshirt
shorts=15; %price of shorts
socks=5; %price of socks 
solution=0;


 for i=20 %cannot have more than 20 socks (over $100)
    for j = 6 %cannot have more than 6 shorts (over $100)%cannot have more than 20 socks (over $100)
        for k=5 %cannot have more 5 tshirts (over $100)

        %Some code or function that will add them up so they are
        %exactly $100??

        tshirt+shorts+socks==100
        end
     end
 end

我知道这段代码是原始的,但我对如何处理无能为力.... 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

看起来你在这个问题上有一个良好的开端,我可以看到你正在努力解决这个问题。我会尽力帮助你。

tshirt=20; %price of tshirt
shorts=15; %price of shorts
socks=5; %price of socks 
solution=0;

良好的开端,我们知道事物的价格。看起来这个问题在for循环中,你想要经历所有的可能性......

for i = 0:20
  for j = 0:6
    for k = 0:5
      %Check to see if this combonation is equal to 100 bucks
      if(i*socks + j*shorts + k*tshirt == 100)
        %I'll let you figure out the rest ;)
      end
    end
  end
end

希望能让你入门。 for循环实际上做的是将变量设置为您提供的数字之间的所有内容,增加1.这样,i = 0,然后是1,然后是2 ...等等所以现在你可以检查每个组合。

答案 1 :(得分:1)

您还可以使用所有可能的总和值填充三维矩阵,因为您的范围非常小;然后,您只需查找相等的值100

price=100;

tshirt=20; %price of tshirt
shorts=15; %price of shorts
socks=5; %price of socks 

[X,Y,Z]=meshgrid(1:floor(100/tshirt),1:floor(100/shorts),1:floor(100/socks));
SumsMatrix=tshirt*X+shorts*Y+socks*Z;

linIds=find(SumsMatrix==100);
[idx,idy,idz]=ind2sub(size(SumsMatrix),linIds);

comb=[idx idy idz]