2 条题解
-
4
● 引言:
STL
STL(Standard Template Library),即 标准模板库,是一个具有工业强度的、高效的C++程序库,内部包含了许多常用算法模板。
STL 全排列函数 next_permutation()
包含于头文件
<algorithm>
,将数字类型数据按照字典序全排列。基本格式:
int a[n]; do{ //代码块 } while(next_permutation(a, a+n));
WARNING:
-
next_permutation() 函数作用范围:自数组当前字典序始依次增大至最大字典序
eg.
int a[3]={1, 0, 2}; do{ for(int i=0; i<n; i++) printf("%d ", a[i]); printf("\n"); } while(next_permutation(a, a+3));
输出:
1 0 2
1 2 0
2 0 1
2 1 0
int a[3]={1, 0, 2}; sort(a, a+3); do{ for(int i=0; i<n; i++) printf("%d ", a[i]); printf("\n"); } while(next_permutation(a, a+3));
输出:
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
-
next_permutation() 属于原地算法,会直接更新数组的值。如果“下一个排列”存在,函数返回
true
并执行排列,否则返回false
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main(){ char s[10]; scanf("%s", s); int const n=strlen(s); int t[10]; for(int i=0; i<n; i++) t[i] = i; do{ for(int i=0; i<n; i++) printf("%c ", s[t[i]]); printf("\n"); } while(next_permutation(t, t+n)); return 0; }
-
-
0
#include<cstdio> #include<cstring> using namespace std; char s[11]; //输入的字符串 char a[11]; //生成的序列 bool f[11]; //记录状态,初始状态默认为false int len; //记录字符串的长度 void print() //输出生成的序列 { for(int i=1;i<len;i++) printf("%c ",a[i]);//每两个数之间有空隔 printf("%c\n",a[len]);//每行最后一个数 } void find(int x) { if(x>len) print();//边界条件 else { for(int i=0;i<len;i++) //字符串从0位开始数 if(f[i]==false) { a[x]=s[i];//用a数组记录每一位 f[i]=true;//第i位调用过就记为true find(x+1);//递归调用 f[i]=false;//恢复现场 } } } int main() { scanf("%s",&s);//读入字符串 len=strlen(s);//求字符串长度 find(1); //搜索 return 0; }
- 1
信息
- ID
- 419
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 87
- 已通过
- 36
- 上传者