2016-06-24 9 views
2

Ich wurde gebeten, dieses einfache Problem zu lösen, und meine Fähigkeiten in der Programmierung ist ziemlich miserabel. Hier ist es,Suche nach allen möglichen Permutationen/Kombinationen um eine bestimmte Summe in Matlab

Angesichts der folgenden Artikel, finden Sie alle Kombinationen von Kleidungsstücken, so dass die Gesamtkosten genau $ 100 ist.

Hier ist mein Code:

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 

Ich weiß, dass dieser Code primitiv, aber ich bin ratlos, wie zu nähern .... Jede Hilfe wird sehr geschätzt.

+0

Dies ist im Grunde das Münzwechselproblem, es wird ein guter Anfang für die Suche sein. –

+0

Die endgültige Gleichung sollte aussehen wie ich * Tshirt + j * Shorts + k * Socken == 100. Ich kann mich nicht an Matlab erinnern, aber generell solltest du folgendes haben: if (i * tshirt + j * shorts + k * socks == 100) Lösung = Lösung + 1 –

Antwort

2

Es sieht so aus, als ob Sie einen guten Start für dieses Problem haben, und ich kann sehen, dass Sie mit dem Code ein bisschen kämpfen. Ich werde versuchen, dir zu helfen.

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

Guter Anfang, wir kennen die Preise der Dinge. obwohl Sieht aus wie das Problem in der for-Schleifen ist, können Sie durch alle Möglichkeiten gehen wollen ...

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 

Hoffnung, die bekommen Sie begonnen haben. was eine for-Schleife tatsächlich tut, setzt diese Variable auf alle Dinge zwischen den Zahlen, die Sie inklusive liefern, um 1 inkrementieren. Auf diese Weise, i = 0, dann 1, dann 2 ... etc ... So können Sie jetzt überprüfen jede Kombination.

1

Sie können auch eine 3-D-Matrix mit allen möglichen Werten der Summen füllen, da Ihre Bereiche ziemlich klein sind; Dann suchen Sie nur nach den gleichen Werten 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]