用C语言编写代码计算n个数的全排列,输入n,输出1,2,3,...n的全排列,利用分治法实现。
时间: 2024-03-23 21:40:26 浏览: 69
好的,以下是用分治法计算n个数的全排列的C语言代码:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void permute(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++) {
swap(&arr[start], &arr[i]);
permute(arr, start + 1, end);
swap(&arr[start], &arr[i]);
}
}
}
int main() {
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
permute(arr, 0, n - 1);
return 0;
}
```
代码中的 `swap` 函数用于交换数组中两个元素的位置。 `permute` 函数用于计算全排列。如果 `start` 等于 `end`,则表示已经排列完了所有元素,输出当前排列。否则,循环从 `start` 开始遍历到 `end`,并交换当前元素与 `start` 元素的位置,然后递归地计算下一个元素的排列,最后再交换回来,以便下次循环使用。
在 `main` 函数中,首先输入要排列的元素个数 `n`,然后创建一个数组 `arr` 并填充从 1 到 `n` 的整数,最后调用 `permute` 函数计算全排列并输出。
阅读全文