1 solutions

  • 0
    @ 2025-12-14 20:47:20

    小朋友,咱们现在换个思路来解决这个拼数的问题。就像你说的,我们从 10000 到 99999 这些五位数一个一个去看,把每个五位数拆分开,看看它的每一位数字是不是都在我们输入的卡片数字里,要是都在,那就说明这个五位数是可以用这些卡片拼出来的。下面我把这个思路拆成几个步骤来讲哈:

    步骤一:读取输入

    和之前一样,我们要先把题目给的卡片数量 n 和每张卡片上的数字读进来。咱们还是用一个数组来存这些数字。

    步骤二:遍历所有五位数

    从 10000 开始,一直到 99999,一个一个地看这些五位数。就像我们在一排房子里,一个一个房间去敲门看看是不是符合要求。

    步骤三:拆分五位数

    对于每一个五位数,我们要把它拆分成个位、十位、百位、千位和万位这五个数字。这就好像把一个大蛋糕切成五小块。

    步骤四:判断拆分后的数字是否都在输入的卡片数字里

    把拆分后的每个数字和输入的卡片数字比一比,看看是不是都能在卡片数字里找到。要是都能找到,那就说明这个五位数是可以用这些卡片拼出来的。

    步骤五:统计符合要求的五位数的数量

    每找到一个符合要求的五位数,我们就把数量加 1,最后得到的就是能拼出的不同五位数的总数啦。

    下面是对应的 C++ 代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;  // 卡片的总数
    int a[210];  // 用来存每张卡片上的数字
    int ans = 0;  // 最终能拼出的不同五位数的数量
    
    // 判断一个五位数是否可以用输入的卡片数字拼出来
    bool check(int num) {
        bool used[210] = {false};  // 标记每张卡片是否被使用
        // 拆分五位数
        int digit[5];
        for (int i = 4; i >= 0; i--) {
            digit[i] = num % 10;
            num /= 10;
        }
        // 检查每个数字是否在卡片数字里
        for (int i = 0; i < 5; i++) {
            bool found = false;
            for (int j = 0; j < n; j++) {
                if (!used[j] && a[j] == digit[i]) {
                    used[j] = true;  // 标记这张卡片已使用
                    found = true;
                    break;
                }
            }
            if (!found) return false;  // 如果有数字找不到对应的卡片,就不符合要求
        }
        return true;
    }
    
    int main() {
        cin >> n;  // 读取卡片的总数
        for (int i = 0; i < n; i++) {
            cin >> a[i];  // 读取每张卡片上的数字
        }
        // 遍历所有五位数
        for (int i = 10000; i <= 99999; i++) {
            if (check(i)) ans++;  // 如果这个五位数符合要求,答案加 1
        }
        cout << ans << endl;  // 输出结果
        return 0;
    }
    

    代码里,check 函数就是用来判断一个五位数是否可以用输入的卡片数字拼出来的。在 main 函数里,我们先读取输入,然后遍历所有五位数,调用 check 函数进行判断,最后输出能拼出的不同五位数的数量。

    我给你举个例子帮助你理解哈。假如输入的卡片数字是 1 2 3 4 5,当我们检查五位数 12345 的时候,把它拆分成 12345,然后发现这些数字都在卡片数字里,所以 12345 就是符合要求的五位数。要是检查五位数 12346,拆分成 12346,发现 6 不在卡片数字里,那 12346 就不符合要求啦。

    • 1

    Information

    ID
    1021
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    7
    Tags
    (None)
    # Submissions
    18
    Accepted
    8
    Uploaded By