GESP 三级 · GESP 202412 C++ 三级 第 12 题

选择题 · 答案 C · 考点:循环控制

← 整套速查表 GESP 三级 全部真题

题目

想要计算从数字 $n$ 到数字 $m$ 之间(包含 $n$ 和 $m$ )有多少个数字 $d$ 出现,下列程序哪个能够实现( )。

A.

int n, m, res, d;
cin >> n >> m >> d;
for (int i = n + C1; i <= m; i++) {
    int temp = i;
    while (temp) {
        if (temp % 10 == d) res++;
        temp /= 10;
    }
}
cout << res << endl;
return 0;

B.

int n, m, res, d;
cin >> n >> m >> d;
for (int i = n; i <= m; i++) {
    int temp = i;
    while (temp) {
        if (temp % 10 = d) res++;
        temp /= 10;
    }
}
cout << res << endl;
return 0;

C.

int n,m,res=0,d; cin >> n >> m>>d; for(int i = n; i <= m; i++){ int temp = i; while(temp){ if(temp % 10 == d) res++; temp /= 10; } } cout << res << endl; return 0;


D.

int n,m,res=0,d; cin >> n >> m>>d; for(int i = n; i <= m; i++){ while(temp){ if(temp % 10 == d) res++; temp /= 10; } } cout << res << endl; return 0;

答案:C

考点

循环控制

解题思维

答案C。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】循环控制|数字位处理|变量初始化

命题人想考的是"逐位判断"的基础流程。核心逻辑链:初始化计数变量→外层循环遍历区间→内层循环提取个位→比较是否匹配→累加计数。

逐个选项拆解:

命题人埋了三个典型坑:区间边界(A)、比较符混淆(B)、变量未初始化(D)。学生如果只背"for 循环 + while 除取余"模板,就会忽略初始化res=0和检查i <= m的正确性。

反命题思维:如果把这道题改成"统计区间内能被 d 整除的数",核心逻辑变成if (i % d == 0) res++;,考察点转向模运算;若改成"区间总位数",则需累加i的位数,考察点转向位运算。刷到类似题时,先问自己"命题人想考我什么"。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断