1 solutions

  • 0
    @ 2025-10-26 22:35:16

    小朋友们,咱们来一起解决这个平衡数的问题哈。首先呢,题目告诉我们平衡数就是正整数(x),它每一位数字(d)恰好都在(x)里出现了(d)次。比如说(122),百位的(1)在(122)里就出现了(1)次,十位和个位的(2)在(122)里都出现了(2)次,所以(122)就是平衡数。现在要我们找出(l)到(r)之间所有平衡数的和。那咱们就一步一步来,下面我会详细给你们讲讲每一步是怎么做的哦。

    解题步骤

    1. 判断一个数是否为平衡数

      • 我们要把这个数的每一位数字都取出来,看看每个数字在这个数里出现的次数是不是和它本身一样。比如说数字(3),它在这个数里就得出现(3)次才行。
      • 咱们可以用一个数组来记录每个数字出现的次数。就好像有(10)个小盒子,每个盒子代表一个数字(0 - 9),我们把这个数的每一位数字拿出来,放到对应的小盒子里,放一次就给这个小盒子里的数字加(1)。
      • 然后再检查每个小盒子里的数字是不是和它代表的数字一样。如果都一样,那这个数就是平衡数啦。
    2. 找出(l)到(r)之间的所有平衡数并求和

      • 我们从(l)开始,一个一个数地检查,一直到(r)。
      • 要是这个数是平衡数,就把它加到一个总和里。

    代码示例

    #include<bits/stdc++.h>
    using namespace std;
    
    // 判断一个数是否为平衡数
    bool isBalanced(int num) {
        int count[10] = {0};  // 定义一个数组,用来记录每个数字出现的次数,初始都为0
        int temp = num;  // 把num存到temp里,这样不会改变num的值
    
        // 把这个数的每一位数字取出来,放到对应的小盒子里
        while (temp > 0) {
            int digit = temp % 10;  // 取出最后一位数字
            count[digit]++;  // 对应的小盒子里的数字加1
            temp /= 10;  // 去掉最后一位数字
        }
    
        temp = num;
        // 检查每个小盒子里的数字是不是和它代表的数字一样
        while (temp > 0) {
            int digit = temp % 10;  // 取出最后一位数字
            if (count[digit] != digit) {  // 如果不一样,就不是平衡数
                return false;
            }
            temp /= 10;  // 去掉最后一位数字
        }
        return true;  // 如果都一样,就是平衡数
    }
    
    int main() {
        int l, r;
        cin >> l >> r;  // 输入l和r
    
        int sum = 0;  // 定义一个变量,用来存平衡数的总和
        // 从l到r一个一个数地检查
        for (int i = l; i <= r; i++) {
            if (isBalanced(i)) {  // 如果是平衡数
                sum += i;  // 加到总和里
            }
        }
    
        cout << sum << endl;  // 输出总和
        return 0;
    }
    

    代码解释

    • isBalanced 函数:这个函数用来判断一个数是不是平衡数。
      • count[10] 数组就像那(10)个小盒子,用来记录每个数字出现的次数。
      • while (temp > 0) 这个循环把数的每一位数字取出来,放到对应的小盒子里。
      • 第二个 while (temp > 0) 循环检查每个小盒子里的数字是不是和它代表的数字一样。
    • main 函数:
      • 输入(l)和(r)。
      • 用一个 for 循环从(l)到(r)一个一个数地检查。
      • 如果是平衡数,就加到 sum 里。
      • 最后输出 sum

    这样,我们就可以找出(l)到(r)之间所有平衡数的和啦。

    • 1

    Information

    ID
    221
    Time
    1000ms
    Memory
    64MiB
    Difficulty
    6
    Tags
    # Submissions
    23
    Accepted
    10
    Uploaded By