코딩/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;

}