题解 | #密码强度等级#

密码强度等级

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-23 11:37
延安大学 C++
绷不住了,晚上十点发拒信,是还在加班吗这样一想挂了好像也没什么不好
码农索隆:这个都是真人发嘛,会用到机器人定时发嘛
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
嗨害嗨我来了:你跟他说开迈巴赫呢,一个月好几万,让学弟尝尝一点小小的社会险恶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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