2026年3月GESP真题及题解(C++二级):数数

2026年3月GESP真题及题解(C++二级):数数

题目描述

对于正整数 n n n,如果 n n n 的所有数位中包含恰好 3 3 3 个 2 2 2,Alice 会认为这个正整数是美丽的。例如,正整数 24122 24122 24122 中包含 3 3 3 个 2 2 2,所以 24122 24122 24122 是美丽的;正整数 132 132 132 中包含 1 1 1 个 2 2 2,所以 132 132 132 不是美丽的;正整数 212322 212322 212322 中包含 4 4 4 个 2 2 2,所以 212322 212322 212322 不是美丽的。

Alice 想知道正整数 L L L 到正整数 R R R(包括 L L L 和 R R R)中有多少美丽的正整数,你能帮她数一数吗?

输入格式

输入共 2 2 2 行,第一行为正整数 L L L,第二行为正整数 R R R。

输出格式

输出一行,包含一个整数 C C C,表示 L L L 到 R R R 中 C C C 美丽数的数量。

输入输出样例 1
输入 1
复制代码
2221
2223
输出 1
复制代码
2
说明/提示
样例解释

2221 2221 2221 到 2223 2223 2223 中, 2221 2221 2221 与 2223 2223 2223 是美丽的, 2222 2222 2222 不是美丽的。

数据范围

保证 1 ≤ L ≤ R ≤ 10 6 1 \leq L \leq R \leq 10^6 1≤L≤R≤106。

思路分析

题目要求统计区间 L, R 内,十进制表示中恰好包含 3 个数字 2 的正整数的个数。

数据范围 1 ≤ L ≤ R ≤ 10 6 1 \leq L \leq R \leq 10^6 1≤L≤R≤106,最大数字为 10 6 10^6 106,即最多 7 位。因此可以采用最直接的暴力枚举法:遍历区间内每一个整数,通过不断取末位并除以 10 的方式分解其十进制各位数字,统计数字 2 出现的次数,如果恰好为 3,则计数器加 1。

遍历次数最多为 10 6 10^6 106,每次分解最多 7 次操作,总运算量约为 7 × 10 6 7 \times 10^6 7×106,在计算机上可以快速完成,且代码实现简单,不易出错。

代码实现

cpp 复制代码
#include <bits/stdc++.h>   
using namespace std;

int l, r, ans = 0;          // l:区间左端点, r:区间右端点, ans:答案计数器

int main() {
    cin >> l >> r;          // 输入区间的左右端点
    for (int i = l; i <= r; i++) {   // 枚举区间内的每一个整数 i
        int n = i;          // 用临时变量 n 来分解,避免修改循环变量 i
        int cnt = 0;        // 记录当前数 n 中数字 2 的个数
        while (n) {         // 当 n 不为 0 时循环(处理所有数位)
            if (n % 10 == 2) cnt++;   // 取末位,如果是 2 则计数加 1
            n /= 10;        // 去掉末位,继续处理下一位
        }
        if (cnt == 3) ans++; // 如果恰好有 3 个 2,答案加 1
    }
    cout << ans;            // 输出最终统计结果
    return 0;
}

功能分析

  1. 输入处理
    • 从标准输入读取两个整数 lr,分别表示区间的左端点和右端点,保证 l ≤ r
  2. 核心计数逻辑
    • 使用 for 循环遍历区间 [l, r] 中的每一个整数 i
    • 对于每个 i,将其值赋给临时变量 n,然后通过 while 循环逐位分解:
      • n % 10 取出当前最低位,判断是否为 2,若是则计数器 cnt 加 1。
      • n /= 10 去掉已处理的最低位,继续处理更高位。
    • 循环结束后,比较 cnt 是否等于 3,若成立则总答案 ans 加 1。
  3. 输出结果
    • 循环结束后,将 ans 输出到标准输出。
  4. 复杂度分析
    • 时间复杂度 :最坏情况下循环次数为 R − L + 1 ≤ 10 6 R - L + 1 \le 10^6 R−L+1≤106,每个数分解的位数不超过 7,因此总操作次数约为 7 × 10 6 7 \times 10^6 7×106,在 1 秒内完全可以完成。
    • 空间复杂度:仅使用了几个整型变量,空间复杂度为 O(1)。

各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
东东最爱敲键盘16 分钟前
day9.C++多态之虚函数
开发语言·c++
Darkwanderor30 分钟前
Linux线程控制
linux·c语言·c++
Darkwanderor1 小时前
多线程的互斥问题和互斥锁解决互斥问题
linux·c语言·c++
键盘会跳舞1 小时前
C++:std::pair 源码级深度剖析 —— 关联容器的基石
开发语言·c++·pair·关联容器
(Charon)1 小时前
【C++】手写线程安全队列:mutex + condition_variable 实现生产者消费者模型
c语言·开发语言·c++
·薯条大王10 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
hansang_IR15 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘15 小时前
day7.c++继承
c++
沫璃染墨16 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
吃着火锅x唱着歌16 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习