2013-10-21 4 views
0

이 알고리즘은 십진, 센트, 페니 만 사용하여 입력 금액을 변경할 수있는 방법을 찾아야합니다. 나의 접근 방식은 나누기와 정복 전략을 사용하고 가장 큰 동전, 십센트 및 동전을 사용하지 않고 변경하는 방법의 수를 변경하는 방법의 수를 찾아 문제를 분리하는 것이 었습니다. 이 알고리즘에 대한 구현을 작성하여 1 ... 14의 입력에 대해 문제를 올바르게 해결하지만 입력이 15보다 크거나 같으면 반환 된 결과가 올바르지 않습니다. 분명히 내 알고리즘이 잘못되어 코드를 수정하기 위해 어떤 변화가 필요하며 내 접근법이 적절한 분할 및 정복 솔루션인지 궁금합니다.제한된 동전으로 변경하기위한 알고리즘 나누기 및 정복

public static int makeChange(int n) { 

     if(n < 0) 
      return 0; 
     else { 

     int sum = makeChange(n-10) + makeChange(n-5) + 1; 

     return sum; 
    } 
} 

많은 감사를 다음과 같이

코드입니다.

+0

'makeChange2' 어떠한가 계산하면 1을 반환해야 출력 대신에 그것을 수정해야하고, 표시 할 수있는 모든 것들을 요약한다 ? 그것을 게시하십시오. – Raptor

+2

동적 프로그래밍은 분할 및 정복보다이 문제에 더 적합합니다. – Kunal

+1

* "입력이 15보다 크거나 같으면 반환 된 결과가 잘못되었습니다."* 어떤 결과가 나타 났습니까? 어떤 결과를 기대 했습니까? (또는 당신은 단지 우리를 "부정확 한"상태로 남겨 둘 예정입니까?). 나는 또한 당신이 * 실제로 귀하의 게시물에 질문을하지 * 지적합니다. – abelenky

답변

2

힌트 :

int nways_10 (int n) { 
    int s = 0; 
    int d = n/10; 

    for (int i = 0; i <= d; ++i) { 
     s += nways_5 (n - 10*i); 
    } 

    return s; 
} 

당신은 필요한 경우, nways_5 및 기타 함수를 작성하는 방법을 생각을 얻어야한다.

+1

여기에 무슨 일이 일어나고 있는지 설명하기 만하면됩니다. 사용할 수있는 각 수의 십진수에 대해 십진법을 사용하지 않고 남은 것에 대한 변경 방법 수를 찾으십시오. –

관련 문제