第m个排列 Description:1—n的排列共有n!种,把这n!种排列按字典序顺序排列。比如n=3时,所有的排列是123,132,213,231,312,321.现在告诉你n(n<10,n>=1)和m(m<=n!),你能不能求出1—n的所有排列按字典序排列后的第m个排列是多少?Input:每一行都有两个整数n和m(n>=1,n<10,m<=n!),代表一组输入数据,n==0,m==0表示输入结束。Output:对于每一组数据,输出1—n的排列中的第m个排列。SampleInput:11 2300SampleOutput:1 31
代码如下(PS:n和m的值大了,处理速度有点慢。没做异常处理,输入异常你看着办吧~):
#include
#include
using namespace std;
void display(set a)
{
set::iterator b;
for(b= gin();b!=a。 end();b++)
cout compute(set input)
{
set arg;
set a;
set output;
set::iterator b,c;
if( ze ()==1)
{
return input;
}
for(b= gin ();b!=input。 end();b++)
{
ar...全部
代码如下(PS:n和m的值大了,处理速度有点慢。没做异常处理,输入异常你看着办吧~):
#include
#include
using namespace std;
void display(set a)
{
set::iterator b;
for(b= gin();b!=a。
end();b++)
cout compute(set input)
{
set arg;
set a;
set output;
set::iterator b,c;
if( ze ()==1)
{
return input;
}
for(b= gin ();b!=input。
end();b++)
{
arg=input;
c= nd(*b);
ase (c);
a=compute(arg);
for(c= gin ();c!=a。end ();c++)
sert ((*b)+(*c)*10);
}
return output;
}
void main()
{
int n,m,i,count;
set input;
set output;
set::iterator b;
cout>n;
cout>m;
if(n==0 || m==0)
return;
for(i=1;i<=n;i++)
sert (i);
output=compute(input);
for(count=1,b= gin ();count end ())
b= gin ();
}
cout<<"结果为:"<<*b<收起