输入:
不超过6位数的正整数N,注意:构成正整数N的数字可重复
输出:
组成正整数N的所有位数的全排列,这些排列按升序输出,每个排列占一行。


今天碰到这样一题,然后偶然想到字符串的全排列,,于是去百度找,发现都写的很繁琐。。碰巧这题我比较懒用到了字符串,于是做个小结:

  1. /*
  2. ascll码全排列(字符,数字都OK)
  3. */
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. int main(){
  8. string s;//因为不知道是几位数,就用了string,于是变成了字符串
  9. //主要是因为懒
  10. cin>>s;
  11. int l=s.length();
  12. int a[l];
  13. for(int i=0;i<l;i++){//转数组
  14. a[i]=s[i]-48;
  15. }
  16. sort(a,a+l);//全排列之前要排序,,,
  17. do{
  18. for(int i=0;i<l;i++){
  19. printf("%c",a[i]+48);//还原成字符输出
  20. }
  21. cout<<endl;
  22. }while(next_permutation(a,a+l));//全排列
  23. return 0;
  24. }

就这样,很简单就实现了字符串的全排列哦 ~ 哈哈哈

注意:全排列时你的对象是什么类型 输入就应该输出什么类型,因为上面代码里 加 减 的48 是相互抵消的,—>还原输入时的类型

2020-10-03 13:32:10 星期六


受到室友bbh的启发,我又对代码进行了精简(改进) 2333:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<string.h>
  4. using namespace std;
  5. int main(){
  6. char a[1001];
  7. gets(a);
  8. int l=strlen(a);
  9. sort(a,a+l);
  10. do{
  11. for(int i=0;i<l;i++){
  12. cout<<a[i];
  13. }
  14. cout<<endl;
  15. }while(next_permutation(a,a+l));
  16. return 0;
  17. }

实现的效果是一样的,但是把第一个代码的一些繁琐过程取消了 哈哈哈
2020-10-05 18:25:17 星期一

点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论