c函数,不允许c99,实现将大小为mustPass_num的一维数组mustPass[mustPass_num]的全排列用二维数组arrays[factorial(mustPass_num)][mustPass_num]输出。
时间: 2023-06-18 18:07:25 浏览: 84
以下是一个实现样例,利用了递归和交换元素的方法生成全排列:
```c
#include <stdio.h>
int factorial(int n) {
int res = 1;
for (int i = 2; i <= n; i++) {
res *= i;
}
return res;
}
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void permute(int mustPass[], int l, int r, int arrays[][r]) {
if (l == r) {
for (int i = 0; i < r; i++) {
arrays[factorial(r) - 1][i] = mustPass[i];
}
} else {
for (int i = l; i <= r; i++) {
swap(&mustPass[l], &mustPass[i]);
permute(mustPass, l+1, r, arrays);
swap(&mustPass[l], &mustPass[i]);
}
}
}
int main() {
int mustPass[] = {1, 2, 3};
int mustPass_num = sizeof(mustPass) / sizeof(mustPass[0]);
int arrays[factorial(mustPass_num)][mustPass_num];
permute(mustPass, 0, mustPass_num-1, arrays);
for (int i = 0; i < factorial(mustPass_num); i++) {
for (int j = 0; j < mustPass_num; j++) {
printf("%d ", arrays[i][j]);
}
printf("\n");
}
return 0;
}
```
首先定义了一个阶乘函数 `factorial`,用来计算全排列的数量。然后定义了一个 `swap` 函数,用来交换数组中的两个元素。最后定义了一个递归函数 `permute`,用来生成全排列。在 `main` 函数中,先计算出输入数组的大小,然后声明一个二维数组 `arrays`,并调用 `permute` 函数生成全排列。最后输出 `arrays` 中的结果。
阅读全文