分析:
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void swap(char a[],int i, int j){
char t=a[i];
a[i]=a[j];
a[j]=t;
}
void fun(char num[],int n,int m){ //n为递归的剩余部分的初始元素,m为最大的下标
if(n==m){ //递归到最后一个下标
cout<<num<<endl;
}
else{
for(int i=n;i<=m;i++){
char t[7]; //先保存好最初排好序的数组
strcpy(t,num);
swap(num,n,i); //将递归的剩余部分的初始元素与当前元素交换
sort(num+n+1,num+m+1); //保证交换后,从交换的元素下一个位置起始都是顺序排序,以保证字典排序
fun(num,n+1,m); //继续递归
strcpy(num,t); //回溯原始的数组
}
}
}
int main(){
char num[7];
cin>>num;
int len=strlen(num);
sort(num,num+len); //最初始可能不是按照顺序排列
fun(num,0,len-1);
return 0;
}