您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: