数组元素全排列、组合 C语言代码
时间: 2024-12-06 07:10:13 浏览: 43
在C语言中,生成数组的所有元素全排列通常涉及到递归,而组合则可以使用循环或者动态规划的方式。以下是两个示例:
**数组元素全排列(Permutations):**
```c
#include <stdio.h>
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
void permute(int arr[], int l, int r) {
if (l == r)
printf("%d ", arr[l]);
else {
for (int i = l; i <= r; i++) {
swap(&arr[l], &arr[i]);
permute(arr, l + 1, r);
swap(&arr[l], &arr[i]); // 恢复原状态,以便继续下一次尝试
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}
```
**组合(Combinations):**
组合数计算可以用`n choose k`公式,这里我们提供一种基于循环的简化版实现,假设数组长度大于等于所需的组合数:
```c
#include <stdio.h>
// 计算组合数,阶乘用于简化计算
unsigned long long factorial(int n) {
unsigned long long fact = 1;
for (int i = 1; i <= n; ++i)
fact *= i;
return fact;
}
// C(n, k) 的计算
unsigned long long combination(int n, int k) {
return factorial(n) / (factorial(k) * factorial(n - k));
}
int main() {
int n = 5, k = 3;
printf("Combination of %d choose %d is: %llu\n", n, k, combination(n, k));
return 0;
}
```
阅读全文