正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2012 第一轮真题 › 第 27 题
NOIP 提高 2012 第一轮 第 27 题:完善程序(排列数)第 1 空
题目
1.(排列数)输入两个正整数 $n, m (1 \leq n \leq 20, 1 \leq m \leq n)$,在 $1\sim 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;
}
⑤;
}
}
}
}本小题
①处应填( )
答案
false
题解
考点定位
本题(完善程序「排列数」第①空)考「后继存在标志」,对应大纲 4.3.1 生成排列(难度【3】)。
解题过程
①处输出当前排列后先假定无后继:
``cpp flag = false; ``
答案:false。
易错提醒
① 与普及组 2012 同题(此处为填空);② 找到可增位时置 true。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号