728x90
반응형

문제 : http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=227&sca=10d0

 

JUNGOL

 

www.jungol.co.kr

문제

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

 

Hint!

"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 num,arr[101];

void out();
void dice(int number);

int main()
{
	scanf("%d",&num);
	arr[0] = 1;
	
	dice(1);
	
	return 0;
	
}

void out()
{
	int i;
	for(i = 1; i<=num; i++)
	{
		printf("%d ",arr[i]);
	}
	printf("\n");
}

void dice(int number)
{
	int i;
	if(number > num)
	{
		out();
		return;
	}
	
	for(i = arr[number-1]; i<=6; i++)
	{
		arr[number] = i;
		dice(number+1);
	}
}

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기