正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2026 第一轮真题 › 第 33 题

CSP-J 2026 第一轮 第 33 题:程序(三):当输入为 200 时,程序输出的行数为

阅读程序 · 枚举与模拟 · 答案 C

题目

#include <iostream>
using namespace std;
bool check_prime(int x) {
    if (x <= 1) return false;
    for (int i = 2; i * i <= x; i++) {
        if (x % i == 0) return false;
    }
    return true;
}
int n;
void search_result(int x) {
    if (!check_prime(x)) return;
    if (x >= n) {
        cout << x << endl;
        return;
    }
    for (int i = 0; i <= 9; i++) {
        search_result(x * 10 + i);
    }
}
int main() {
    cin >> n;
    for (int i = 1; i <= 9; i++) search_result(i);
    return 0;
}

本小题

当输入为 200 时,程序输出的行数为( )。

选项

  • A. 12
  • B. 13
  • C. 14
  • D. 15

答案

C

题解

选 C. 14。

关键是理解 search_result(x) 的执行顺序:

  1. 如果 x 不是质数,直接返回,不会继续添加数字。
  2. 如果 x 是质数且 x >= 200,输出一行并返回。
  3. 如果 x 是质数且 x < 200,就在末尾添加一位数字,继续递归。

所以,能输出的数,它的每个前缀都必须是质数。例如 233 的前缀 2、23、233 都是质数,才能走到输出。

一位质数只有 2、3、5、7,由它们扩展得到的两位质数及后续输出如下:

两位质数添加一位后可以输出的质数行数
23233、2392
292931
31311、313、3173
37373、3792
53无0
59593、5992
717191
73733、7392
797971

这些分支得到的三位数都大于等于 200,质数会立即输出并返回,因此不会再扩展到四位数。

总行数为: \[ 2+1+3+2+0+2+1+2+1=\boxed{14} \]

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号