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
函数使用递归实现组合算法。可以根据需要传入不同的起始位置和结束位置来计算不同长度的排列组合。