nyoj-19 擅长排列的小明
2017-05-14 21:13
253 查看
擅长排列的小明
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
输入
第一行输入整数N(1<N<10)表示多少组测试数据,
每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
输出
在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
样例输入
2 3 1 4 2
样例输出
2 3 12 13 14 21 23 24 31 32 34 41 42 43
来源
C++STL的next_permutation
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>与之完全相反的函数还有prev_permutation
在STL中,除了next_permutation外,还有一个函数prev_permutation,两者都是用来计算排列组合的函数。
前者是求出下一个排列组合,而后者是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:
对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。-------转载
string s("12345asdf");
string a=s.substr(0,5); --获得字符串s中 从第0位开始的长度为的字符串//默认时的长度为从开始位置到尾
#include <iostream> #include <string.h> #include <algorithm> using namespace std; int main() { int N; cin>>N; while (N--) { int n,m; int i,j; cin>>n>>m; string a,b; for (i=1;i<=n;i++) a += i+'0'; b = a.substr(0,m); cout<<b<<endl; while (next_permutation(a.begin(),a.end())) { if (b!=a.substr(0,m)) { b = a.substr(0,m); cout<<b<<endl; } } } return 0; }
相关文章推荐
- nyoj 19 擅长排列的小明
- NYOJ 题目19 擅长排列的小明(dfs)
- NYOJ 19 擅长排列的小明(dfs递归)
- NYOJ19 擅长排列的小明 【深搜】
- nyoj 19 擅长排列的小明
- nyoj19 擅长排列的小明
- NYOJ--19--擅长排列的小明
- nyoj19擅长排列的小明(STL)&&(DFS)
- nyoj 19 擅长排列的小明 【全排列(n中抽取m个数)】
- nyoj 19 擅长排列的小明 【next_permutation() 】
- NYOJ 19 擅长排列的小明
- nyoj19(擅长排列的小明)
- NYOJ 题目19 擅长排列的小明(非图DFS)
- NYOJ 19 擅长排列的小明(dsf STL——next_permutation函数)
- nyoj 19擅长排列的小明 (DFS)
- NYOJ19 擅长排列的小明【next_permutation】
- nyoj 19 擅长排列的小明(深搜,next_permutation)
- NYOJ---19擅长排列的小明
- nyoj 19 擅长排列的小明
- nyoj19擅长排列的小明(递归)