아홉 명의 난쟁이 중 일곱명을 선택해 난쟁이의 키가 100이되는 경우에 난쟁이의 키를 오름차순으로 출력하자.
오름차순으로 출력 하기 위해 9명의 난쟁이를 먼저 오름차순으로 정렬하자.
9명중에 7명을 조합하는 재귀 함수를 만든다.
합이 100이면 출력하자.
최종 경우에 합을 가지고만 판단하기에 앞서 누가 선태 되었는지 확인 할 수 없기에 누가 선택 됬는지 기억해줄 배열이 하나 필요하다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 9;
const int TEEMO_MAX = 7;
vector<int> teemo(MAX);
bool check[MAX];
int findTeemo(int pos, int count, int sum)
{
if (count == TEEMO_MAX)
{
if (sum == 100)
{
for (int i = 0; i < pos + 1; i++)
if (check[i])
cout << teemo[i] << '\n';
return true;
}
}
else
{
for (int i = pos; i < MAX; i++)
{
check[i] = true;
if (findTeemo(i + 1, count + 1, sum + teemo[i]))
return true;
check[i] = false;
if (findTeemo(i + 1, count, sum))
return true;
}
}
return false;
}
int main()
{
for (int i = 0; i < MAX; i++)
cin >> teemo[i];
sort(teemo.begin(), teemo.end());
findTeemo(0, 0, 0);
return 0;
}
2019-02-03 00:00:13에 Tistory에서 작성되었습니다.