본문 바로가기
Programming/Project Euler

31. 프로젝트 오일러 #31 : 코인들의 합

by 작은별하나 2015. 3. 30.
반응형

이번문제는 재귀 함수를 만들어서 프로그램을 작성했습니다.


예를 들어서 200 파운드를 계산하기 위해서 첫번째 가장 큰 단위의 코인을 쓸 것인지부터 몇개를 쓸것인지 결정하여서 나머지 돈에 대해서 그 다음 단위의 코인을 이용하여 경우의 수를 따졌습니다.


코인의 금액을 200, 100, 50, 20, 10, 5, 2, 1 을 각각 으로 놓는다면, 경우의 수 를 금액 n에 대하여 i 이상에 대한 코인으로 조합하는 경우의 수라고 한다면, 다음과 같이 재귀적인 표현이 가능합니다.


이 방식을 이용해서 프로그램을 작성하면 다음과 같습니다.

프로그램은 참고용으로만 봐주세요.




#include <stdio.h>

int getcomb(int n, int d);

int main()
{
    printf("Ans = %d\n", getcomb(200, 0));
}

int getcomb(int n, int d)
{
    const int v[] = { 200, 100, 50, 20, 10, 5, 2, 1, 0 };

    if( n == 0 ) return 1;
    if( v[d] == 0 ) return 0;

    int sum = 0;
    int t = n/v[d];
    for( int i = 0 ; i <= t ; i++ )
        sum += getcomb(n-i*v[d], d+1);
    return sum;
}



728x90

댓글