参考代码:
#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 人评分
本人酷爱递归实现很多问题,这里也是浏览:631 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:672 |
A+B for Input-Output Practice (V) (C语言代码)浏览:497 |
1054题解浏览:516 |
计算质因子 (C语言代码)浏览:778 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:504 |
1199题解浏览:707 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:1390 |
整数分类问题 为什么输出总是数字8啊浏览:451 |
P1002 (C++代码)浏览:794 |