题解 | #密码强度等级#

密码强度等级

http://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361

题意:
        规则如下:
        
       
     

方法一:
直接模拟

思路:
        直接模拟。
        循环遍历字符串,分别统计字母个数、数字个数、符号个数,和判断是否有大小写混合字母。
        然后,根据加分规则进行计算。
        最后,根据计算的值判断属于什么安全等级。

      
#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    while(cin >> s){
        int sum=0;
        int n1=0,n2=0,n3=0;//字母个数、数字个数、符号个数
        int len=s.size();
        if(len<=4)//根据字符串长度计算
            sum+=5;
        else if(len<8)
            sum+=10;
        else 
            sum+=25;
        int f1=0,f2=0;
        int num=0;//判断是否有大小写混合字母
        for(int i=0;i<len;i++){//统计字母个数、数字个数、符号个数
            if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){//字母
                n1++;
                if(s[i]>='a'&&s[i]<='z'){
                    if(f1==0)
                        num++,f1=1;
                }else{
                    if(f2==0)
                        num++,f2=1;
                }
            }else if(s[i]>='0'&&s[i]<='9')//数字
                n2++;
            else//符号
                n3++;
        }
        if(n1>0){//根据字母个数计算
            if(num==1)
                sum+=10;
             else if(num==2)
                sum+=20;
        }
        if(n2==1)//根据数字个数计算
            sum+=10;
        else if(n2>1)
            sum+=20;
        if(n3==1)//根据符号个数计算
            sum+=10;
        else if(n3>1)
            sum+=25;
        if(num==2&&n1&&n2&&n3)//大小写字母、数字和符号
            sum+=5;
        else if(n1&&n2&&n3)//字母、数字和符号
            sum+=3;
        else if(n1&&n2)//字母和数字
            sum+=2;
        //评分
        if(sum>=90)
            cout << "VERY_SECURE\n";
        else if(sum>=80)
            cout << "SECURE\n";
        else if(sum>=70)
            cout << "VERY_STRONG\n";
        else if(sum>=60)
            cout << "STRONG\n";
        else if(sum>=50)
            cout << "AVERAGE\n";
        else if(sum>=25)
            cout << "WEAK\n";
        else if(sum>=0)
            cout << "VERY_WEAK\n";
    }
    
    return 0;
}


时间复杂度:
空间复杂度:

方法二:
C++函数

思路:
        直接运用C++函数isalpha()、isdigit()判断字母和数字。
        其他也是参照方法一模拟。

#include <bits/stdc++.h>

using namespace std;

int main(){
    string s;
    while(cin >> s){
        int sum=0;
        int n1=0,n2=0,n3=0;//字母个数、数字个数、符号个数
        int len=s.size();
        if(len<=4)//根据字符串长度计算
            sum+=5;
        else if(len<8)
            sum+=10;
        else
            sum+=25;
        int f1=0,f2=0;
        int num=0;//判断是否有大小写混合字母
        for(int i=0;i<len;i++){//统计字母个数、数字个数、符号个数
            if(isalpha(s[i])){//字母
                n1++;
                if(s[i]>='a'&&s[i]<='z'){
                    if(f1==0)
                        num++,f1=1;
                }else{
                    if(f2==0)
                        num++,f2=1;
                }
            }else if(isdigit(s[i]))//数字
                n2++;
            else//符号
                n3++;
        }
        if(n1>0){//根据字母个数计算
            if(num==1)
                sum+=10;
             else if(num==2)
                sum+=20;
        }
        if(n2==1)//根据数字个数计算
            sum+=10;
        else if(n2>1)
            sum+=20;
        if(n3==1)//根据符号个数计算
            sum+=10;
        else if(n3>1)
            sum+=25;
        if(num==2&&n1&&n2&&n3)//大小写字母、数字和符号
            sum+=5;
        else if(n1&&n2&&n3)//字母、数字和符号
            sum+=3;
        else if(n1&&n2)//字母和数字
            sum+=2;
        //评分
        if(sum>=90)
            cout << "VERY_SECURE\n";
        else if(sum>=80)
            cout << "SECURE\n";
        else if(sum>=70)
            cout << "VERY_STRONG\n";
        else if(sum>=60)
            cout << "STRONG\n";
        else if(sum>=50)
            cout << "AVERAGE\n";
        else if(sum>=25)
            cout << "WEAK\n";
        else if(sum>=0)
            cout << "VERY_WEAK\n";
    }
    
    return 0;
}

时间复杂度:
空间复杂度:




全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 18:02
来组里2个月了,天天让打杂,写的代码不超过200行。现在已经开始摆烂冲秋招了。我感觉4个月,就算周六日全天睡觉,周一到周五一直看黑马也比我来节子实习学到的东西多。
小熊梦奇:😅节子那么多文档,你是一个都不看啊。 大厂的意义在于内部系统对你开放,看明白事情起因经过结果解决措施,实在看不明白,直接聊天系统搜到对应团队去问当时的负责人,大部分情况下都会给你解答。 这才是大厂实习的精髓
实习生的蛐蛐区
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-25 17:26
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务