C語言實現排列組合算法可以使用遞歸或迭代的方式來實現。以下是使用遞歸實現排列組合算法的示例代碼:
#include <stdio.h>
// 計算階乘
int factorial(int n) {
if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
// 排列
void permutation(int arr[], int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = start; i <= end; i++) {
// 交換arr[start]和arr[i]
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
permutation(arr, start + 1, end);
// 恢復arr[start]和arr[i]的交換
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
}
}
}
// 組合
void combination(int arr[], int data[], int start, int end, int index, int r) {
if (index == r) {
for (int i = 0; i < r; i++) {
printf("%d ", data[i]);
}
printf("\n");
return;
}
for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
data[index] = arr[i];
combination(arr, data, i + 1, end, index + 1, r);
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
// 排列
printf("Permutations:\n");
permutation(arr, 0, n - 1);
// 組合
printf("\nCombinations:\n");
for (int r = 1; r <= n; r++) {
int data[r];
combination(arr, data, 0, n - 1, 0, r);
}
return 0;
}
以上代碼中,permutation
函數使用遞歸實現排列算法,combination
函數使用遞歸實現組合算法。可以根據需要傳入不同的起始位置和結束位置來計算不同長度的排列組合。