c语言输出abc全排列
时间: 2023-09-14 07:14:26 浏览: 67
以下是使用递归实现输出abc的全排列的C语言代码:
```c
#include<stdio.h>
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void permutation(char *str, int left, int right) {
if (left == right) {
printf("%s\n", str);
} else {
for (int i = left; i <= right; i++) {
swap(&str[left], &str[i]);
permutation(str, left + 1, right);
swap(&str[left], &str[i]);
}
}
}
int main() {
char str[] = "abc";
permutation(str, 0, 2);
return 0;
}
```
输出结果为:
```
abc
acb
bac
bca
cba
cab
```
相关问题
c语言倒序输出全排列
C语言可以通过递归的方式实现倒序输出全排列。这个问题可以通过将数组中的元素交换位置来生成全排列。具体实现步骤如下:
1. 首先,创建一个函数`reversePermutation`,该函数接受两个参数:数组`arr`和该数组的起始索引`start`。
2. 在`reversePermutation`函数中,如果`start`等于数组长度减1,则将当前数组输出。否则,进入循环,并从`start`开始遍历数组。
3. 在循环内,交换`start`和当前遍历到的索引的元素。
4. 递归调用`reversePermutation`函数,并将`start+1`作为参数传递。
5. 在完成递归调用后,恢复数组的原始状态,将刚刚交换的元素再次交换回来。
下面是实现该算法的示例代码:
```
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void reversePermutation(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]);
reversePermutation(arr, start + 1, end);
swap(&arr[start], &arr[i]); // 恢复数组的原始顺序
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
reversePermutation(arr, 0, n - 1);
return 0;
}
```
上述代码演示了如何使用C语言递归方法实现倒序输出全排列。编译运行该代码将输出以下结果:
```
3 2 1
2 3 1
3 1 2
1 3 2
2 1 3
1 2 3
```
用c语言实现输出全排列
```
#include <stdio.h>
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++) {
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
permute(arr, start + 1, end);
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
}
}
}
int main()
{
int arr[] = { 1, 2, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}
```
输出结果:
```
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
```