http://acm.nyist.net/JudgeOnline/problem.php?pid=19
数字的排列问题 字典序全部输出。
1.substr函数的作用是截取字符substr(a[2],a+n)截取从数组中第二个开始的向后n个的一段。如果是string s1定义的 可以使用substr(s1.begin(),s1.end());
2.next_permutation(s1.begin(),s1.end())作用是从第一个开始,一直向下枚举,例如:123 132 213 231 312 321 直到没有下一个,返回FALSE;
3.string 定义的S1,可以进行如下的操作。相当于直接在后面添加数字字符,不用for循环,比较方便。
for(i=1;i<=x;i++)
{
s1+=’0’+i;
}
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
int i,t;
cin>>t;
while(t--)
{
int x,y;
string s1,s2;
cin>>x>>y;
for(i=1;i<=x;i++)
{
s1+='0'+i;
}
//cout<<s1<<endl;
s2=s1.substr(0,y);
cout<<s2<<endl;
while(next_permutation(s1.begin(),s1.end()))
{
if(s2!=s1.substr(0,y))
{
s2=s1.substr(0,y);
cout<<s2<<endl;
}
}
}
return 0;
}