题库 信息学奥赛题库 题目列表 (排列数)输入两个正整数n,m(1<n<20,1<m&...
填空题

(排列数)输入两个正整数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;  
}
题目信息
完善程序 2012年 初赛
-
正确率
0
评论
102
点击