题解:P10906 [蓝桥杯 2024 国 B] 合法密码

· · 题解

P10906[蓝桥杯 2024 国B] 合法密码

题目链接:P10906

题目大意

在给定的字符串中寻找符合要求的字符串,这些字符串需要满足以下两个要求:

样例分析

本题提交答案即可,即把正确的答案提交上去即可,不需要提交代码。

思路构建

很明显,一个由 100 个字符组成的字符串想要一一枚举出来极其不现实,既容易多数漏数也容易重复数,因此还是需要编写一个代码来实现。
这个代码其实很简单,从字符串第一个数开始,这个数保持不变,然后找出所有长度为 8~16 之间的所有字符串(这里就是满足第一个条件),接着看这些字符串是否满足第二个条件,如果满足ans++,不满足则不加。
重复上面这个步骤直到还剩7个字符时停止。

代码展示

本题答案为 400,直接输出这个数即可。

这里给出部分代码,仅供参考。

void solve()
{
    string s;
    cin >> s;
    int n = s.size();
    auto check = [&](string t) -> bool
    {
        bool fl = 0;
        for(auto c : t)
            if(isdigit(c))
                fl = 1;
        if(!fl) return false;
        for(auto c : t)
        {
            if(isdigit(c) || isalpha(c)) continue;
            return true;
        }
        return false;
    };
    int cnt = 0;
    for(int i = 0; i < n; i ++)
    {
        for(int len = 8; len <= 16; len ++)
        {
            if(i + len - 1 >= n) break;
            int l = i, r = i + len - 1;
            string s1 = s.substr(i, len);
            if(check(s1))
                cnt ++;
        }
    }
    cout << cnt << endl;
}

完结撒花

感谢您看到这里,如果您觉得有帮助麻烦您点个赞谢谢~