写注释 #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 arr[5]; printf("请输入5个整数:\n"); for (int i = 0; i < 5; i++) { scanf("%d", &arr[i]); } printf("所有排列组合为:\n"); permute(arr, 0, 4); return 0; }
时间: 2024-04-11 09:28:33 浏览: 70
```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 arr[5];
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]); // 接受键盘输入的整数
}
printf("所有排列组合为:\n");
permute(arr, 0, 4); // 调用 permute 函数生成并输出排列组合
return 0;
}
```
这段代码实现了一个生成给定数组的所有排列组合的函数 `permute`。函数中使用了递归的方式,通过交换数组元素的位置来生成排列。`swap` 函数用于交换两个整数的值。在 `main` 函数中,首先接受用户输入的 5 个整数,并存储在数组 `arr` 中。然后,调用 `permute` 函数生成并输出所有排列组合的结果。
阅读全文