양의 정수 n과 r이 주어져 있을 때, 집합 {1,2,3,….,n}에서 반복을 허용하는 r-순열을 모두 나열하라.

#include <stdio.h>
#include <stdlib.h>
int n, r;
int *leaf; // 트리의 잎 배열
int count = 0; // 순열 나열한 것 줄 단위로 카운트
// 중복 순열 개수 구하는 함수
int over_permu_num() {
int answer = 1;
for (int i = 0; i < r; i++)
answer *= n;
printf("▷ π(%d,%d) = %d\n\n", n, r, answer);
}
// 중복 순열 나열하는 함수
void over_permutation(int depth)
{
if (r == 0)
return 0;
if (r == depth) {
for (int i = 0; i < r; i++)
printf("%d ", leaf[i]);
printf("\n");
count++;
return;
}
for (int i = 0; i < n; i++) {
leaf[depth] = i + 1;
over_permutation(depth + 1);
}
}
int main()
{
printf("■ 양의 정수 n과 r이 주어져 있을 때, 집합 {1,2,3,....,n}에서 반복을 허용하는 r-순열을 모두 나열하라.\n");
printf("\n□ n을 입력하시오: ");
// n 입력 받기
scanf_s("%d", &n);
// r만들기 (0~n-1)
srand(time(NULL));
r = rand() % n;
printf("\n▷ r = %d\n", r);
// n과 r을 바탕으로 트리 구성에 필요한 데이터 구하기
if (r != 0) leaf = (int *)malloc(sizeof(int)*r);
// 중복 순열 문제 풀기
over_permu_num();
over_permutation(0);
printf("\n◈ 순열 나열한 것 카운트 = %d\n", count);
// 메모리 할당 해제
free(leaf);
return 0;
}
확률 코드 패키지
조합 사전 순으로 나열하기
중복 조합 사전 순으로 나열하기
중복 순열 사전 순으로 나열하기
순열 사전 순으로 나열하기