https://www.acmicpc.net/problem/6603
재귀함수로 구현할 수 있는데, 현재 인덱스를 선택하거나 안 하거나 둘 다 재귀함수로 호출을 해서 모든 경우를 출력할 수 있게 된다.
매개변수는 인덱스와 카운트로 설정해줘서 카운트가 6이되면 추가한 숫자들을 출력하도록 하면 된다. 출력용 배열은 vector를 사용할 수도 있지만 일반 배열을 사용하려면 P[cnt + 1](출력용) = S[idx + 1](기존 배열)로 변경해주면 된다.
#include <cstdio>
using namespace std;
int s[50], b[7], N;
void printAll(int idx, int cnt)
{
if (cnt == 6)
{
for (int i = 1; i <= 6; ++i)
printf("%d ", b[i]);
puts("");
return;
}
if (idx >= N)
return;
b[cnt + 1] = s[idx + 1];
printAll(idx + 1, cnt + 1);
printAll(idx + 1, cnt);
}
int main()
{
while (true)
{
scanf("%d", &N);
if (N == 0)
break;
for (int i = 1; i <= N; ++i)
scanf("%d", &s[i]);
printAll(0, 0);
puts("");
}
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 2775번: 부녀회장이 될테야 (0) | 2018.08.04 |
---|---|
[BOJ] 10250번: ACM 호텔 (0) | 2018.08.04 |
[BOJ] 1967번: 트리의 지름 (0) | 2018.08.02 |
[BOJ] 2178번: 미로 탐색 (0) | 2018.08.02 |
[BOJ] 11383번: 뚊 (0) | 2018.08.02 |
[BOJ] 4999번: 아! (0) | 2018.08.02 |
댓글