程序填空题

排列数

题目描述

输入两个正整数 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 = 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;
						}
				;
			}
		}
	}
}

(1) ①处应填()。

A. 0
B. 1
C. !flag
D. used[m]

(2) ②处应填()。

A. used[data[i]]=false
B. used[i]=false
C. used[data[i]]=true
D. used[i]=true

(3) ③处应填()。

A. !flag
B. data[j]
C. j
D. flag

(4) ④处应填()。

A. n+m
B. k
C. n
D. m

(5) ⑤处应填()。

A. return
B. continue
C. !flag
D. break