알고리즘

C++ division 재귀함수

Chars4785 2019. 2. 27. 11:04

예제 입력

5

예제 출력

4+1
3+2
3+1+1
2+2+1
2+1+1+1
1+1+1+1+1
6


20 이하 숫자만 줍니다.



#include <iostream>

using namespace std;

int n;
int ary[21];
int num[20] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int k;

void dfs(int dp,int count)
{
int sum = 0;
for (int i = 0;i < n;i++)
sum += ary[i];

if (sum == n)
{
for (int i = 0;i < dp;i++)
{
if(i == dp-1) cout<< ary[i];
else cout << ary[i]<<"+";

}

k++;
cout << endl;
return;
}
else if (sum > n) {
return;
}else{

for (int i = count;i >= 0;i--)
{//4부터
ary[dp] = num[i];
dfs(dp+1,i);
ary[dp] =0;
}

}


}

int main() {

cin >> n;
dfs(0, n-2);
cout<<k<<endl;
return 0;
}