c·c++/c 프로그래밍

조합하여 숫자구하기 코드 질문이요!

바로이순간 2012. 5. 8. 08:35




숫자 n과 구성 갯수 s를 입력 받아서 s개의 숫자의 합이 n이 되는 모든 경우를 출력하고, 경우의 개수를 출력하세요.

구성되는 숫자는 모두 다른 숫자로 구성되어야 합니다.


위와 같은 문제를 풀고 있는데요...

출력결과가 


조합할 숫자를 입력해 주세요. 17

구성개수를 입력해 주세요. 4


1 + 2 + 3 + 11 = 17

1 + 2 + 4 + 10 = 17

1 + 2 + 5 + 9 = 17

1 + 2 + 6 + 8 = 17

1 + 3 + 4 + 9 = 17

1 + 3 + 5 + 8 = 17

1 + 3 + 6 + 7 = 17

1 + 4 + 5 + 7 = 17

2 + 3 + 4 + 8 = 17

2 + 3 + 5 + 7 = 17

2 + 4 + 5 + 6 = 17


총 개수 : 11개


이런식으로 나와야 합니다.


===============================================


#include <iostream>

using namespace std;

int check(int s[], int sum, int level, int composition) {

    static int count=0;

    int i, max, x=0;


    if(level<composition) {

        for(i=0;i<level;++i) x=x+s[i];

        max=(sum-x+1)/(composition-level);

        for(i=s[level]+1;i<max;++i) {

            s[level+1]=i;

            check(s,sum,level+1,composition);

        }

    }

    else {

        for(i=0;i<composition+1;++i) x=x+s[i];

        if(sum==x) {

            ++count;

            for(i=1;i<level;++i) cout<<s[i]<<" + ";

            cout<<s[level]<<endl;

        }

    }

    return count;

int main() {

    int InputValue, Composition, sum = 0;

    cout << "조합할 숫자를 입력해 주세요. "; 

    cin >> InputValue;

    cout << "구성갯수를 입력해 주세요. "; 

    cin >> Composition;

    int count;

    int stack[100]={0,};

    count=check(stack, InputValue, 0, Composition);


    cout<<"총 개수: "<<count;

    return 0;

}


위와 같이 순환호출이 필요합니다.

'c·c++ > c 프로그래밍' 카테고리의 다른 글

세수를 크기 순으로 출력하기  (0) 2012.05.10
분수의 덧셈  (0) 2012.05.09
비순환호출로 고친 머지소트  (0) 2012.05.07
다항식의 곱셈  (0) 2012.05.06
2진 다항식의 곱셈  (0) 2012.04.30