matlab

2016-06-24 8 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 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 ... etc ... 각 조합.

1

또한 범위가 매우 작기 때문에 가능한 모든 합계 값을 3 차원 매트릭스에 채울 수 있습니다. 그런 다음 동일한 값을 찾아보십시오. 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]