(排列数)输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。
例如:
输人:
3 2
输出:
1 2
1 3
2 1
2 3
3 1
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=l;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=[ ① ];
for(i=m;i>=1;i--)
(2)
for (j=data[i]+1;j<=n;j++)
if (!used[ j])
used[j]=true;
data[i]-[ ③ ];
flag-true;
break;
if(flag)
for(k=i+l;k<=m;k++)
for (j=1;j<=[ ④ ];j++)
if(!used[j])
data[k]=j;
used[j]=true;
break;
return 0i
1处应填
false
ture
1
-1
2处应填
used[i]=true
data[i]=i
used[ data[i]]= true
used[ data[i]]= false
3处应填
j
i
ture
false
4处应填
n
m
i
j
5处应填
return o
exit
continue
break
发表评论