← 查看本卷题目
组合题5 个小题
已作答 0 / 5

1.(排列数)输入两个正整数 n,m(1≤n≤20,1≤m≤n)n, m (1 \leq n \leq 20, 1 \leq m \leq n),在 1∼n1\sim n 中任取 mm 个数,按字典序从小到大输出所有这样的排列。例如: 输入: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;						}				⑤;			}		}	}}
第 29 题填空题

③处应填( )

填写答案