用递归的方法实现全排列 可以看看
#include<iostream> #include<cstring> #include<sstream> #include<algorithm> using namespace std; //int s; int a[1000]; int i=0; void Line(int n,string str) { if(n==str.length())//表示其中一种排列的情况 { int num; int flag=0; stringstream ss(str);//将该字符串放入到输入流中并赋值给ss ss>>num;//将ss中的内容变成整数赋给num for(int j=0;j<i;j++)//判断该整数是否已经在a数组内 { if(num==a[j]) flag=1; } if(flag==0) a[i++]=num;//不在则把该整数放入到该数组 //cout<<str<<endl; return;//返回 } for(int i=n;i<str.length();i++) { { char t=str[i];str[i]=str[n];str[n]=t;//交换首字符和其他字符的位置 } Line(n+1,str);//对剩下的字符串进行全排列 char s=str[i];str[i]=str[n];str[n]=s;//回溯 } } int main() { //freopen("data.in.txt","r",stdin); //freopen("data.out.txt","w",stdout); string str; cin>>str;//输入字符串 Line(0,str);//进行全排列 sort(a,a+i);//对a数组中的数进行从大到小的排列 for(int j=0;j<i;j++) { stringstream ss; ss<<a[j];//把整数变成字符串流赋给ss string str1=ss.str();//把字符串流赋给str1。 for(int i=str1.length();i<str.length();i++)//这是针对数字中有0的情况 字符串变成整数后 前面的0会被省略 所以在此处补充上 { cout<<"0"; } cout<<a[j]<<endl; } cout<<endl; return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复