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

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

CSP-J 2026 第一轮 第 31 题:程序(三):当输入为 24 时,程序输出的第 3 行为

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

题目

#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;
}

本小题

当输入为 24 时,程序输出的第 3 行为( )。

选项

  • A. 23
  • B. 29
  • C. 31
  • D. 239

答案

B

题解

答案是 B. 29。

这段程序按深度优先的顺序搜索,规则是:

  • x 不是质数:直接返回。
  • x 是质数且 x >= 24:输出 x,然后返回。
  • x 是质数且 x < 24:依次在末尾添加数字 0~9,继续搜索。

从 main 开始:

  1. 1 不是质数,跳过。
  2. 2 是质数,但小于 24,依次尝试 20、21、……、29。
  3. 20、21、22 不是质数,跳过。
  4. 23 是质数,但仍小于 24,因此先深入搜索 230~239。
  5. 其中只有 233、239 是质数,依次输出,成为第 1、2 行。
  6. 搜索完 23 的分支后,回到上一层,继续尝试 24~29。
  7. 24~28 都不是质数。
  8. 29 是质数且大于等于 24,输出,成为第 3 行。

所以前三行是:

``text 233 239 29 ``

关键是:遇到 23 时,要先搜索完它的所有分支,才会继续检查 24~29。

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