用递归的方法实现全排列 可以看看
#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 人评分
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:1018 |
汽水瓶 (C++代码)(直接n/2就可以了)浏览:1138 |
明明的随机数 (C++代码)浏览:867 |
人民币问题 (C语言代码)浏览:720 |
母牛的故事 (C语言代码)浏览:1748 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:703 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:466 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:543 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:467 |
WU-蓝桥杯算法提高VIP-交换Easy (C++代码)浏览:1186 |