文章
67
粉丝
207
获赞
29
访问
34.9k
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char b[1000][10];//输出数组
int c=0;
void swap (char A[],int p,int q){
char temp;
temp=A[p];
A[p]=A[q];
A[q]=temp;
}
/*void printArray(char A[],int n){ //这种方法输出的先后顺序可能不一样,所以不调用这个输出函数
for(int i=0;i<=n;i++)
printf("%c",A[i]);
printf("\n");
}*/
void perm (char A[],int p,int q){
if(p==q){
//printArray(A,q);//输出
strcpy(b[c],A);
c++;
}
else {
for(int i=p;i<=q;i++){
swap(A,p,i);//交换 交换第p个和第i 、第i+1 、i+2个......
perm(A,p+1,q);//p+1 到q 做全排列
swap(A,p,i);//还原 还原成全排列前的原数组
}
}
}
int main(){
char d[10];
char A[1000];
for(int i=0;i<1000;i++)
A[i]=0;
for(int i=0;i<10;i++)
d[i]=0;
scanf("%s",A);
int len=strlen(A);
perm(A,0,len-1);
//对 b做冒泡排序
for(int i=0;i<c;i++)
{
for(int j= c-2;j>=i;j--){
if(strcmp(b[j+1],b[j])<0)
{
strcpy(d,b[j+1]);
strcpy(b[j+1],b[j]);
strcpy(b[j],d);
}
}
}...
登录后发布评论
暂无评论,来抢沙发