로또 6603
//
// Created by JayPark on 2020/05/10.
//
#include "algo.h"
using namespace std;
int num;
bool sel[13];
vector<int> res;
vector<int> arr;
// 재귀를 이용해 문제를 풀것이다.
void solve(int idx, int cnt){
// 만약 개수가 6개가 찼다면 그 값을 출력
if(cnt == 6){
for(int i=0;i<5;i++){
cout << res[i] << " ";
}
cout << res[5] << '\n';
}
// 반복문을 돌려 원하는 값까지 반복한다.(idx가 0부터 시작하기때문에 '< num' 배열)
for(int k=idx;k<num;k++){
if(sel[k] == true) continue;
// 사용한 것을 true
sel[k] = true;
// 벡터에 값 저
res.push_back(arr[k]);로
// 계속해서 다음을 가리킨다.
solve(k+1, cnt+1);
// 사용했다면 다음에도 사용해야하기때문에 false
sel[k] = false;장
// 백터에 맨뒤에 사용했던것은 빼준다.
res.pop_back();
}
}
int main(){
// 무한루프
while(1){
// 초기 숫자 입력
memset(sel, false, sizeof(sel));
cin >> num;
// 입력값이 0이면 프로그램 종료
if(num == 0) break;
int input;
// 입력한 숫자만큼 반복문을 돌려 숫자를 입력 받는다.
for(int i=0;i<num;i++){
cin >> input;
// 벡터에 값을 입력받아 삽입.
arr.push_back(input);
}
// 시작 인덱스는 0번째 개수도 0개로 시작
solve(0, 0);
cout << endl;
// 다음 값 출력을 위해 사용한 벡터들을 초기화한다.
arr.clear();
res.clear();
}
}