코딩/Language Coder
590 : 함수3 - 자가진단4
pikapika
2019. 2. 26. 22:42
10 이하의 자연수 N을 입력받아 주사위를 N번 던져서 나올 수 있는 모든 경우를 출력하되 중복되는 경우에는 앞에서부터 작은 순으로 1개만 출력하는 프로그램을 작성하시오.
![]() 3 | ![]() 1 1 1 1 1 2 ... 1 1 6 1 2 2 1 2 3 ... 5 6 6 6 6 6 |
"1 1 2", "1 2 1", "2 1 1"은 모두 1이 두 번 2가 한 번 나온 경우이므로 중복이다. 이러한 경우 앞에서부터 작은순으로"1 1 2"한 가지만 출력해야 한다. 현재의 레벨(arr[i])에 담을 값을 1부터가 아니라 이전 레벨에 담겨있는 값(arr[level-1])부터로 정하면 된다. 이 경우 level[0]에는 어떤 값을 넣어야 할지 잘 생각해 보자.
[코드]
#include <stdio.h>
int arr[11] = { 1 };
int n;
void print(int n) {
int i;
for (i = 1; i <= n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void dice(int count) {
int i;
if (n < count) {
print(n);
return;
}
for (i = arr[count - 1]; i <= 6; i++) {
arr[count] = i;
dice(count + 1);
}
}
int main() {
scanf("%d", &n);
dice(1);
return 0;
}