输入:
不超过6位数的正整数N,注意:构成正整数N的数字可重复
输出:
组成正整数N的所有位数的全排列,这些排列按升序输出,每个排列占一行。
今天碰到这样一题,然后偶然想到字符串的全排列,,于是去百度找,发现都写的很繁琐。。碰巧这题我比较懒用到了字符串,于是做个小结:
/*
ascll码全排列(字符,数字都OK)
*/
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string s;//因为不知道是几位数,就用了string,于是变成了字符串
//主要是因为懒
cin>>s;
int l=s.length();
int a[l];
for(int i=0;i<l;i++){//转数组
a[i]=s[i]-48;
}
sort(a,a+l);//全排列之前要排序,,,
do{
for(int i=0;i<l;i++){
printf("%c",a[i]+48);//还原成字符输出
}
cout<<endl;
}while(next_permutation(a,a+l));//全排列
return 0;
}
就这样,很简单就实现了字符串的全排列哦 ~ 哈哈哈
注意:全排列时你的对象是什么类型 输入就应该输出什么类型,因为上面代码里 加 减 的48 是相互抵消的,—>还原输入时的类型
2020-10-03 13:32:10 星期六
受到室友bbh的启发,我又对代码进行了精简(改进) 2333:
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main(){
char a[1001];
gets(a);
int l=strlen(a);
sort(a,a+l);
do{
for(int i=0;i<l;i++){
cout<<a[i];
}
cout<<endl;
}while(next_permutation(a,a+l));
return 0;
}
实现的效果是一样的,但是把第一个代码的一些繁琐过程取消了 哈哈哈
2020-10-05 18:25:17 星期一
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复