输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义: 已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得 s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。 每组样例输出结束后要再输出一个回车。
abc
abc acb bac bca cab cba
#include<stdio.h> char string[26]; int visit[26]={0}; char out[26]; void quanpailie(char string[],int n,int h){ int i,j; if(h>=n){ for(i=0;i<n;i++) printf("%c",out[i]); printf("\n"); } for(i=0;i<n;i++){ if(visit[i]==1) continue; out[h]=string[i]; visit[i]=1; quanpailie(string,n,h+1); visit[i]=0; } return; } int main(){ int i=1; char c; while(scanf("%c",&c)!=EOF){ string[0]=c; while((c=getchar())!='\n') string[i++]=c; quanpailie(string,i,0); printf("\n"); i=1; } }