http://poj.org/problem?id=1833
使用
next_permutation(data+1,data+1+n) //data+1为起始位置,n为长度
runtime error,不知道哪错了,三个用例都能过。
# include<iostream>
# include<algorithm>
using namespace std;
# define N 1030
int main()
{
int m,n,k,i,j,t;
int data[N];
cin>>m;
for(i=1;i<=m;i++)
{
cin>>n>>k;
for(j=1;j<=n;j++)
{
cin>>data[j];
}
t=1;
for(j=2;j<=n;j++)
{
t*=j;//t=n!
}
k%=t;
while(next_permutation(data+1,data+1+n)==true)
{
k--;
if(k==0)
{
break;
}
}
if(k==0)
{
cout<<data[1];
for(j=2;j<=n;j++)
{
cout<<" "<<data[j];
}
cout<<endl;
}
else
{
sort(data+1,data+1+n);//
do
{
k--;
if(k==0)
{
break;
}
}while(next_permutation(data+1,data+1+n)==true);
cout<<data[1];
for(j=2;j<=n;j++)
{
cout<<" "<<data[j];
}
cout<<endl;
}
}
return 0;
}
# include<iostream>
# include<string>
# include<algorithm>
using namespace std;
string s;
void Swap(int i, int j)
{
char si=s[i],sj=s[j];
s[j]=si;
s[i]=sj;
}
void NextPermutation(int n, int i)
{
if(i==n-1)
{
cout<<s<<endl;
}
else
{
for(int j=i;j<n;j++)
{
Swap(i,j);
NextPermutation(n,i+1);
Swap(i,j);
}
}
}
int main()
{
//cin>>s;
//NextPermutation(s.length(),0);
cin>>s;
cout<<s<<endl;
while(next_permutation(s.begin(),s.end())==true) //# include<algorithm>
{
cout<<s<<endl;
}
//prev_permutation();
return 0;
}