반응형
이번문제는 재귀 함수를 만들어서 프로그램을 작성했습니다.
예를 들어서 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
'Programming > Project Euler' 카테고리의 다른 글
프로젝트 오일러 #33 : 약분하는 추가 숫자 (0) | 2015.04.13 |
---|---|
32. 프로젝트 오일러 #32 : 팬디지털 곱 (0) | 2015.04.13 |
30. 프로젝트 오일러 #30 : 각 자릿수의 5승의 합 (0) | 2015.03.30 |
프로젝트 오일러 #29 서로 다른 n제곱 개수 (0) | 2015.03.07 |
28. 프로젝트 오일러 #28 : 회전하는 숫자들의 대각선 합 (0) | 2015.03.04 |
댓글