C언어/문제풀다 하나씩

backtracking 배열 합 더하기 10~20 sum

mcdn 2020. 5. 13. 12:28
반응형

#include <iostream>
using namespace std;

int arr[5];
int path[6];
int sum;
int cnt;
void abc(int lev, int sum, int head) {
	if (sum > 20)return;
	if (lev == 5) {
		if (sum >= 10 && sum <= 20) {
			for (int j = 0; j < head;j++) {
				cout << path[j] << "+";
			}cout<<path[head] << endl;
			cnt++;
		}

		return;
	}
	for (int i = 0; i < 2;i++) {
		if (i == 0) {
			path[head] = arr[lev];
			abc(lev + 1, sum + arr[lev], head+=1);
			path[head] = 0;
			head -= 1;
		}
		else {
			abc(lev + 1, sum, head);
		}
	}




}
int main() {
	for (int i = 0; i < 5;i++) {
		cin >> arr[i];
	}
	abc(0, 0, 0);
	cout << cnt;

}

입력]
1 3 4 7 9
[출력]
3+4+7
3+4+9
4+7
7+9
1+3+4+7
...
_____________
18

 

3 4 5 9 1
3+4+5+1+0
3+4+5+1
3+4+9+1+0
3+4+9+1
3+5+9+1+0
3+5+9+1
3+9+1+0
3+9+1
4+5+9+1+0
4+5+9+1
4+5+1+0
4+9+1+0
4+9+1
5+9+1+0
5+9+1
9+1+0
16

 

<<실제 나오는 값

흠 앵간?

 

반응형