全排列递归程序(用C语言),请求哥哥姐姐帮我修改

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:13:48
#include "stdio.h"
void swap(char a,char b)
{
char temp=a;
a=b;
b=temp;
}

void perm(char list[],int k,int m)
{ int i;
if(k==m)
{
for(i=0;i<=m;i++)
putchar(list[i]);
putchar('\n');
}
else
for(i=k;i<=m;i++)
{
swap(list[k],list[i]);
perm(list,k+1,m);
swap(list[k],list[i]);
}
}

void main()
{
char array[99];
int i,n;

printf("请输入字符个数(n<99):");
scanf("%d",&n);

printf("请输入字符:");
for(i=0;i<=n-1;i++)
scanf("%c",&array[i]);
printf("\n");

perm(array,0,n-1);

}

这是改过之后的代码,改过的地方标出来了,有问题hi我,pur_e

#include "stdio.h"
void swap(char *a,char *b)//函数改了
{
char temp=*a;
*a=*b;
*b=temp;
}

void perm(char list[],int k,int m)
{ int i;
if(k==m)
{
for(i=0;i<=m;i++)
putchar(list[i]);
putchar('\n');
}
else
for(i=k;i<=m;i++)
{
swap(&list[k],&list[i]);//调用改了
perm(list,k+1,m);
swap(&list[k],&list[i]);//调用改了
}
}

void main()
{
char array[99];
int i,n;

printf("请输入字符个数(n<99):");
scanf("%d",&n);
getchar();//吃掉最后的回车符
printf("请输入字符:");
for(i=0;i<=n-1;i++)
scanf("%c",&array[i]);
printf("\n");

perm(array,0,n-1);

}

即使按照楼上说的修改了也不对,主要是你对swap调用的时候有问题, 从小到大排列如下: