编程题

完善程序:(排列数)输入两个正整数n, m (1 ≤n ≤20, 1 ≤m ≤n),在 1~n 中任取 m 个数,按字典序从小到大输出所有这样的排列。例如

输入

3 2

输出:


1 21 32 12 33 13 2


#include

#include

using namespace std;


const int SIZE = 25;


bool used[SIZE];

int data[SIZE];

int n, m, i,j, k;

bool flag;


int main()

{

\tcin>>n>>m;

\tmemset(used, false, sizeof(used));

\tfor (i = 1; i <= m; i )

\t{

\t\tdata[i] = i;

\t\tused[i] = true;

\t}

\tflag = true;

\twhile (flag)

\t{

\t\tfor (i = 1; i <= m-1; i ) cout<

\t\tcout<

\t\tflag =;

\t\tfor (i = m; i >= 1; i--)

\t\t{

\t\t\t;

\t\t\tfor (j = data[i] 1; j <= n; j ) if (!used[j])

\t\t\t{

\t\t\t\tused[j] = true;

\t\t\t\tdata[i] = ;

\t\t\t\tflag = true;

\t\t\t\tbreak;

\t\t\t}

\t\t\tif (flag)

\t\t\t{

\t\t\t\tfor (k = i 1; k <= m; k )

\t\t\t\t\tfor (j = 1; j <=; j ) if (!used[j])

\t\t\t\t\t{

\t\t\t\t\t\tdata[k] = j;

\t\t\t\t\t\tused[j] = true;

\t\t\t\t\t\tbreak;

\t\t\t\t\t}

\t\t\t\t\t;

\t\t\t}

\t\t}

\t}

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论