next_permutation 全排列函数
纸条1:全排列
纸条2:组合数
推荐题目
P1706 全排列问题
#include<bits/stdc++.h>
using namespace std;
int n;
int i;
int j=1;
int k;
int a[10];
int main()
{
cin>>n;
for(i=1;i<=n;i++){
a[i]=n-i+1;
j*=i;
}
for(i=1;i<=j;i++){
next_permutation(a+1,a+n+1);
for(k=1;k<=n;k++)
cout<<" "<<a[k];
cout<<endl;
}
return 0;
}
P1088 [NOIP2004 普及组] 火星人
#include<bits/stdc++.h>
using namespace std;
int a[100000];
int n;
int m;
inline int read(){
int re=0;
int f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-'){
f=-1;
ch=getchar();
}
}
while(ch>='0' && ch<='9'){
re=re*10+(ch-'0');
ch=getchar();
}
return re*f;
}
int main(){
n=read();
m=read();
for(int i=1;i<=n;++i)
a[i]=read();
for(int i=1;i<=m;++i)
next_permutation(a+1,a+n+1);
for(int i=1;i<=n;++i)
printf("%d ",a[i]);
return 0;
}
P1157 组合的输出
#include<bits/stdc++.h>
using namespace std;
int x[30];
int n,r;
int main(){
cin>>n>>r;
for(int i=r+1;i<=n;i++)
x[i]=1;
do{
for(int i=1;i<=n;++i){
if(x[i]==0)
printf("%3d",i);
}
printf("\n");
}while(next_permutation(x+1,x+n+1));
return 0;
}
THE END