#NOIP2012J1Q36. [NOIP 2012 普及组初赛] 第 36 题
[NOIP 2012 普及组初赛] 第 36 题
(排列数) 输入两个正整数n,m(1 < n < 20,1 < m < n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。
例如:
输入:3 2
#include <iostream>
#include <cstring>
using namespace std;
const int SIZE =25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;
int main(){
cin>>n>>m;
memset(used,false,sizeof(used));
for(i=1;i<=m;i++){
data[i]=i;
used[i]=true;
}
flag=true;
while(flag){
for(i=1;i<=m-1;i++) cout << data[i] << " ";
cout << data[m] << endl;
flag= 【第1空】 ;
for(i=m;i>=1;i--){
【第2空】 ;
for(j=data[i]+1;j<=n;j++)
if(!used[j]){
used[j]=true;
data[i]=【第3空】 ;
flag=true;
break;
}
if(flag){
for(k=i+1;k<=m;k++)
for(j=1;j<=【第4空】 ;j++)
if(!used[j]){
data[k]=j;
used[j]=true;
break;
}
【第5空】 ;
}
}
}
return 0;
}
请填写【第5空】。
{{ input(1) }}