#include <stdio.h>
#define MAX_STRING_LENGTH 10
int stackTop = 0;
char combinationStack[MAX_STRING_LENGTH];
void swap(char* x, char* y) {
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permutation(char* str, int l, int r) {
if (l == r) {
printf("%s\n", str);
}
else {
for (int i = l; i <= r; i++) {
swap((str + l), (str + i));
permutation(str, l + 1, r);
swap((str + l), (str + i));
}
}
}
void push(char ch) {
combinationStack[stackTop++] = ch;
combinationStack[stackTop] = '\0';
}
void pop() {
combinationStack[--stackTop] = '\0';
}
void combination(const char* str, int length, int offset, int k) {
if (k == 0) {
printf("%s\n", combinationStack);
return;
}
for (int i = offset; i <= length - k; ++i)
{
push(str[i]);
combination(str, length, i + 1, k - 1);
pop();
}
}
int main() {
freopen("input.txt", "r", stdin);
int N, K, T;
char str[MAX_STRING_LENGTH];
scanf("%d", &T);
for (int test_case = 1; test_case <= T; test_case++) {
scanf("%s%d%d", str, &N, &K);
str[N] = 0;
printf("#%d\n", test_case);
permutation(str, 0, N - 1);
combination(str, N, 0, K);
}
}
순열조합,
순열은 순서가 부여된 임의의 집합을 다른 순서로 뒤섞는 연산
조합은 집합에서 일부 원소를 취해 부분 집합을 만드는 방법
'Android' 카테고리의 다른 글
안드로이드 프로그래밍 Next Step 5장 액티비티 (0) | 2021.06.22 |
---|---|
안드로이드 프로그래밍 Next Step 4장 Context (0) | 2021.06.22 |
안드로이드 하드웨어 서비스 03 Telephony Framework (0) | 2021.06.17 |
인사이드 안드로이드 11. 자바 시스템 서비스 동작 분석 (0) | 2021.06.16 |
안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (6) (0) | 2021.06.12 |
댓글