测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A61253. (排列数)输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。例如:输入:3 2输出:1 21 32 12 33 13 2#include<iostream>

填空题

题目描述

(排列数)输入两个正整数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 namespacestd;
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=    ①     ;
        for(i=m;i>=1;i--)
        {
                 ②     ;
            for(j=data[i]+1;j<=n;j++)
                if(!used[j])
                {
                    used[j]=true;
                    data[i]=    ③   ;
                    flag=true;
                    break; 
                }
            if(flag)
            {
                for(k=i+1;k<=m;k++)
                    for(j=1;j<=    ④   ;j++)
                    if(!used[j])
                    {
                        data[k]=j;
                        used[j]=true;
                        break;
                    }
                     ⑤   ;
            }
        }
    }
    return 0;  
}