欢迎光临
我们一直在努力

2026年【江苏“信息与未来”编程思维】真题及题解(T1:幸运数字)

2026年【江苏“信息与未来”编程思维】真题及题解(T1:幸运数字)

题目描述

如果一个正整数的十进制表示中,每种数字都恰好出现了偶数次,Dr. X 就认为它是幸运数字。例如:

  • 11

    11

    11 是幸运数字,数字

    1

    1

    1 出现了

    2

    2

    2 次 (偶数次)。

  • 131131

    131131

    131131 是幸运数字,数字

    1

    1

    1 出现了

    4

    4

    4 次,数字

    3

    3

    3 出现了

    2

    2

    2 次,都是偶数次。

  • 23333

    23333

    23333 不是幸运数字,因为数字

    2

    2

    2 出现了

    1

    1

    1 次 (奇数次)。

  • 123

    123

    123 不是幸运数字,因为数字

    1

    1

    1

    2

    2

    2

    3

    3

    3 各出现了

    1

    1

    1 次 (奇数次)。

给定两个正整数

a

a

a

b

b

b,请你计算

a

,

a

+

1

,

a

+

2

,

,

b

a, a+1, a+2, \\ldots, b

a,a+1,a+2,,b 中幸运数字的数量。

输入格式

输入两个空格分隔的正整数

a

a

a

b

b

b

输出格式

输出一个整数,表示

a

,

a

+

1

,

a

+

2

,

,

b

a, a+1, a+2, \\ldots, b

a,a+1,a+2,,b 中幸运数字的数量。

输入输出样例 1
输入 1

1 100

输出 1

9

输入输出样例 2
输入 2

1 10000

输出 2

261

说明/提示
  • 1

    1

    1

    100

    100

    100 之间,幸运数字有

    11

    ,

    22

    ,

    33

    ,

    44

    ,

    55

    ,

    66

    ,

    77

    ,

    88

    ,

    99

    11, 22, 33, 44, 55, 66, 77, 88, 99

    11,22,33,44,55,66,77,88,99

数据规模
  • 对于

    100

    %

    100\\%

    100% 的数据,满足

    1

    a

    b

    1

    ,

    000

    ,

    000

    1 \\le a \\le b \\le 1,000,000

    1ab1,000,000

思路分析

问题转化 题目要求统计区间 [a, b] 内所有满足“十进制表示中每种数字(0~9)出现的次数均为偶数”的正整数。 由于 b ≤ 1,000,000,最大只有 7 位数字,直接枚举区间内的每个数并检查其每一位的统计信息,时间复杂度约为 (b-a+1)×7 ≤ 7×10⁶,完全可行,不需要任何高级优化。

判断方法 对于给定的整数 x:

  • 初始化一个长度为 10 的计数数组 cnt,全部置 0。
  • 循环提取 x 的个位数字,将对应计数加 1,然后去掉个位,直到 x 变为 0。
  • 遍历计数数组,若存在某个数字的出现次数为奇数,则 x 不是幸运数字;否则所有次数都是偶数,是幸运数字。
  • 复杂度

    • 时间:O((b-a+1) × log₁₀ b),最坏约 7×10⁶ 次操作。
    • 空间:O(1),仅需常数个计数数组。

    代码实现

    #include <bits/stdc++.h>
    using namespace std;

    bool ck(int x){ // 判断 x 是否为幸运数字
    int c[10]={0};// 计数数组,c[d] 表示数字 d 出现的次数
    while(x){ // 当 x 不为 0 时循环
    c[x%10]++; // 提取个位并累加
    x/=10; // 去掉个位
    }
    for(int i=0;i<10;i++) // 检查所有数字 0~9
    if(c[i]%2==1) return false;// 若出现奇数次,则不是幸运数字
    return true; // 全部偶数,是幸运数字
    }

    int main(){
    int a,b;
    cin>>a>>b; // 读入区间端点
    int ans=0; // 计数器
    for(int i=a;i<=b;i++) // 枚举区间内每个整数
    if(ck(i)) ans++; // 如果是幸运数字,答案加 1
    cout<<ans; // 输出结果
    return 0;
    }


    功能分析

    • 函数 ck:接收一个正整数,返回布尔值表示它是否为幸运数字。
      • 内部使用长度为 10 的数组统计每个数字出现的次数。
      • 通过取模运算 %2==1 判断奇偶性,逻辑清晰且易于理解。
    • 主函数:
      • 读取 a 和 b,保证 a ≤ b。
      • 循环遍历区间,累加满足条件的个数。
      • 输出最终答案,类型为 int 足够(最大区间长度为 10⁶,答案不会超过 10⁶)。

    正确性保证 对于任意正整数,算法都会完整提取其所有十进制位并进行奇偶校验。由于枚举了区间内所有数,不会遗漏或重复统计,因此结果正确。

    性能 在最大数据范围下,执行约 700 万次简单循环,在 C++ 下远小于 1 秒。

    更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转


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

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

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

    在这里插入图片描述

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

    https://edu.csdn.net/course/detail/40437 点击跳转 在这里插入图片描述 https://edu.csdn.net/course/detail/41081 点击跳转 在这里插入图片描述

    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信奥赛冲刺一等奖有效刷题题解:

    信奥赛C++普及组CSP-J一等奖通关刷题题单及题解: https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

    信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):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 点击跳转

    · 文末祝福 ·

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    cout<<"跟着王老师一起学习信奥赛C++";
    cout<<" 成就更好的自己! ";
    cout<<" csp信奥赛一等奖属于你! ";
    return 0;
    }

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » 2026年【江苏“信息与未来”编程思维】真题及题解(T1:幸运数字)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址