正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2026 第一轮真题 › 第 33 题
CSP-J 2026 第一轮 第 33 题:程序(三):当输入为 200 时,程序输出的行数为
题目
#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) 的执行顺序:
- 如果
x不是质数,直接返回,不会继续添加数字。 - 如果
x是质数且x >= 200,输出一行并返回。 - 如果
x是质数且x < 200,就在末尾添加一位数字,继续递归。
所以,能输出的数,它的每个前缀都必须是质数。例如 233 的前缀 2、23、233 都是质数,才能走到输出。
一位质数只有 2、3、5、7,由它们扩展得到的两位质数及后续输出如下:
| 两位质数 | 添加一位后可以输出的质数 | 行数 |
|---|---|---|
| 23 | 233、239 | 2 |
| 29 | 293 | 1 |
| 31 | 311、313、317 | 3 |
| 37 | 373、379 | 2 |
| 53 | 无 | 0 |
| 59 | 593、599 | 2 |
| 71 | 719 | 1 |
| 73 | 733、739 | 2 |
| 79 | 797 | 1 |
这些分支得到的三位数都大于等于 200,质数会立即输出并返回,因此不会再扩展到四位数。
总行数为: \[ 2+1+3+2+0+2+1+2+1=\boxed{14} \]
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号