2016-06-24 61 views
2

我被要求解決這個簡單的問題,而且我的編程技巧非常可憐。在這裏,它是,尋找所有可能的排列/組合以等於matlab中的特定總和

鑑於以下項目,找到所有服裝項目的組合,使總成本正好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 

我知道這個代碼是原始的,但我對如何處理無知.... 任何援助將非常感激。

+0

這基本上是硬幣找零的問題,這將是一個良好的開端,以搜索。 –

+0

最終方程應該看起來像i * tshirt + j * shorts + k * socks == 100。我不記得Matlab,但通常你應該有:if(i * tshirt + j * shorts + k * socks == 100)solution = solution + 1 –

回答

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

您還可以填充所有可能的和值的3-D矩陣,因爲您的範圍非常小;然後,你只是尋找那些也相等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] 
相關問題