1 条题解

  • 0
    @ 2026-10-18 18:33:36

    G3002 [GESP202306 三级] 密码合规 题解

    知识点:字符串处理、字符分类、规则校验。

    解题思路

    按逗号拆分密码。逐个检查长度6到12、仅含合法字符、字母大小写数字三类至少两类,并至少含一个!@#$。

    为什么正确

    各布尔标记描述一条独立规则,全部合取正好是合规条件。

    易错点

    特殊字符不算入“大小写数字至少两类”;不能只检查是否含特殊字符而忽略非法字符。

    复杂度

    时间O(字符串总长度),空间O(输入长度)。

    参考代码(C++17)

    #include<bits/stdc++.h>
    
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        string line,s;
        cin>>line;
        stringstream ss(line);
        while(getline(ss,s,',')) {
            bool lo=0,up=0,dig=0,sp=0,ok=1;
            for(char c:s) {
                if(c>='a'&&c<='z')lo=1;
                else if(c>='A'&&c<='Z')up=1;
                else if(c>='0'&&c<='9')dig=1;
                else if(string("!@#$").find(c)!=string::npos)sp=1;
                else ok=0;
            }
            if(ok&&s.size()>=6&&s.size()<=12&&lo+up+dig>=2&&sp)cout<<s<<"\n";
        }
    }
    

    说明

    本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用12个自行生成的测试点。

    • 1

    信息

    ID
    670
    时间
    1000ms
    内存
    512MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者