题解:P12278 [蓝桥杯 2024 国 Python A] 设置密码

· · 题解

五年级蒟蒻题解,大佬见谅。

和下面的一样,磕了一个多小时。

这题没什么难度,就是判断太多了!

本人写的有点长。

直接看题

注意本题一次读入一整行哦,别问我怎么知道的 QWQ

大写字母判断:

if(s[i]>='A'&&s[i]<='Z'){
    ans+=(cnt[1]==0);
    cnt[1]++;
}

小写字母判断:

if(s[i]>='a'&&s[i]<='z'){
    ans+=(cnt[2]==0);
    cnt[2]++;
}

数字判断:

if(s[i]>='0'&&s[i]<='9'){
    ans+=(cnt[2]==0);
    cnt[2]++;
}

特殊字符判断:

if(s[i]==126||s[i]==33||s[i]==64||s[i]==35||s[i]==36||s[i]==37||s[i]==94||s[i]==38||s[i]==42||s[i]==40||s[i]==41||s[i]==95){
    ll z=1;
    ans+=(cnt[4]==0);
    for(ll j=0;j<i;j++){
        if(s[i]==s[j]){
            z=0;
        }
    }
    cnt[4]+=z;
}

强密码判断:

if(s.size()>=12&&(ans==4||ans>=3&&cnt[4]>=3)){
    cout<<3<<endl;
}

中密码判断:

if(s.size()>=8&&ans>=2){
    cout<<2<<endl;
}

弱密码判断:

if(s.size()>=6){
    cout<<1<<endl;
}

三者都不是的密码判断:

else{
    cout<<0<<endl;
}

合起来

#include<bits/stdc++.h>//万能头
using namespace std;
using ll=long long;
ll t;//判断的密码的个数
string s;//判断的密码
ll cnt[5],ans;//cnt:大写字母、小写字母、数字、特殊字符的数量  ans:大写字母、小写字母、数字、特殊字符,或包含包括特殊字符在内的其中的种数
bool b;
int main(){
    //ios::sync_with_stdio(false);不能用速读
    //cin.tie(0),cout.tie(0);
    cin>>t;
    getline(cin,s);
    while(t--){
        b=false;//全体归零
        s="";
        for(ll i=1;i<=4;i++){
            cnt[i]=0;
        }
        ans=0;
        getline(cin,s);
        for(ll i=0;i<s.size();i++){
            if(s[i]>='A'&&s[i]<='Z'){//大写字母判断
                ans+=(cnt[1]==0);
                cnt[1]++;
            }
            else{//小写字母判断
                if(s[i]>='a'&&s[i]<='z'){
                    ans+=(cnt[2]==0);
                    cnt[2]++;
                }
                else{//数字判断
                    if(s[i]>='0'&&s[i]<='9'){
                        ans+=(cnt[3]==0);
                        cnt[3]++;
                    }
                    else{//特殊字符判断
                        if(s[i]==126||s[i]==33||s[i]==64||s[i]==35||s[i]==36||s[i]==37||s[i]==94||s[i]==38||s[i]==42||s[i]==40||s[i]==41||s[i]==95){
                            ll z=1;
                            ans+=(cnt[4]==0);
                            for(ll j=0;j<i;j++){
                                if(s[i]==s[j]){
                                    z=0;
                                }
                            }
                            cnt[4]+=z;
                        }
                        else{//不是包含大小写字母、数字和特殊字符
                            b=true;
                        }
                    }
                }
            }
        }
        if(b){//不仅包含大小写字母、数字和特殊字符
            cout<<0<<endl;
        }
        else{
            if(s.size()>=12&&(ans==4||ans>=3&&cnt[4]>=3)){//强密码判断
                cout<<3<<endl;
            }
            else{
                if(s.size()>=8&&ans>=2){//中密码判断
                    cout<<2<<endl;
                }
                else{
                    if(s.size()>=6){//弱密码判断
                        cout<<1<<endl;
                    }
                    else{
                        cout<<0<<endl;//三者都不是的密码判断
                    }
                }
            }
        }
    }
    return 0;//完美收尾
}