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; }