OpenJ_Bailian
来源:互联网 发布:资金盘系统源码 编辑:程序博客网 时间:2024/05/18 21:40
该题可以说是非常简单的一道题目,但是挂出来是因为自己在这里用了好几种方法,尤其是温习了一下STL中的next_permutation函数。在此还是码出来。
题意很简单,输入一个字符串,然后输出字典序全排列。给指定序列进行全排列的方式有很多,比如序数法,字典序法,临位互换法。下面的文章非常详细的描述了字典序法生成全排列的原理:字典序法生成全排列
第一种方式是使用递归的思想,把所有的排列方式按顺序遍历一遍,代码很简单,但是值得好好思索其中的思路:
#include <iostream>#include <stdio.h>#include <string>#include <string.h>using namespace std;char str[10];int len;bool mark[10];char prt[10];void print(){ for(int i=0;i<len;i++) printf("%c",prt[i]); printf("\n");}void dfs(int s){if(s==len) { print();} for(int i=0;i<len;i++) { if(mark[i]==0) { mark[i]=1; prt[s]=str[i]; dfs(s+1); mark[i]=0; } }}int main(){ scanf("%s",str);len=strlen(str);dfs(0);return 0;}
第二种方法是使用C++中STL库的next_permutation函数。该函数可以说非常6了,贴出对该函数的详细解答:next_permutation函数
下面贴出代码:
#include<bits/stdc++.h>using namespace std;int main(){char str[10], str1[10];int len, sum=1;scanf("%s",str);len=strlen(str);for(int i = 1; i <= len; i++) {sum *= i;}printf("%s\n", str);for(int i = 1; i < sum; i++) {next_permutation(str, str+len);printf("%s\n", str);}return 0;}
阅读全文
0 0
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian
- OpenJ_Bailian - 3421
- OpenJ_Bailian - 3859
- OpenJ_Bailian - 4120
- OpenJ_Bailian 4118
- OpenJ_Bailian 2788
- 【埃氏筛法】 OpenJ_Bailian
- CSS面试常见知识点
- JS原型链、继承的问题与解决:组合继承、借用构造函数(未完)
- inux必学的命令
- 打印数字
- SpringMVC视图解析器InternalResourceViewResolver
- OpenJ_Bailian
- given final block not properly padded aes
- JAVA内存报错解析
- C++学习之路(13)---std(标准库)和STL(标准模板库)的关系
- Openmp入门(1)
- Quartz学习
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 C.Matrix
- HDFS工作机制
- python待解决问题,为什么不给创建的迭代器对象命名,就不能输出迭代器的下一个元素