C语言的全排列问题!急!

来源:百度知道 编辑:UC知道 时间:2024/07/04 01:49:57
#include<stdio.h>
#include<string.h>
void main()
{ char p[9],t;
int n,i,k,j,k1,k2;
long num=1;
scanf("%d",&n);
if(n<=0||n>8) exit(1);
else
{
for(i=1;i<=n;i++)
scanf("%c",&p[i]);
for(i=2;i<=n;i++)
num*=i;
for(k=2;k<=num;k++)
{
for(i=n-1;i>=0&&strcmp(p[i],p[i+1])>0;i--) continue;
for(j=n;j>i&&strcmp(p[j],p[i])<=0;j--) continue;
t=p[i];p[i]=p[j];p[j]=t;
for(k1=i+1,k2=n;k1<=k2;k1++,k2--)
{
t=p[k1];p[k1]=p[k2];p[k2]=t;
}
for(i=1;i<=n;i++)
printf("%c",p[i]);
printf("\n");
}
}
}
由于刚涉及C语言编程,所以水平甚低。。
想请教一下是哪里错了啊?
我是想输入n(0<n<=8)个不同字符,按字典序输出他们所有的排列情况。
PS:如果要

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int hash[27];
char word[201];
int n;
void dfs(int cur)
{
if(cur>=n)
{
printf("%s\n",word);
return ;
}
int i;
for(i=0;i<26;i++)
if(hash[i])
{
hash[i]--;
word[cur]=i+'a';
dfs(cur+1);
hash[i]++;
}
return ;
}
int main()
{
int i;
scanf("%s",word);
n=strlen(word);
memset(hash,0,sizeof(hash));
for(i=0;i<n;i++)
hash[word[i]-'a']++;
dfs(0);
return 0;
}

楼主看一下,输入一行字符,输出全排列,多个案例的话最外面加个while循环就是了

粗略看了一下,语法上好像没错误,应该把编译时错误信息发过来看看,你写数据的时候会出错?显示什么呢?

问题太多了,不好调