题解 | #密码验证合格程序#

密码验证合格程序

http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

暴力法通过这道题目

用一个变量require来记录密码的三个要求

  1. s.size()来判断长度
  2. 通过for循环来判断密码种类,用一个空间大小为4的数组来记录满足的情况
  3. 判断重复元素有点难,使用了stl中的substr(pos,len),返回从pos位置开始长度为len的子串,对比即可
#include <bits/stdc++.h>
using namespace std;

void judgePassword(string s) {
    int require = 0, flag = 0;
    int countTypes[4] = {0};//小大写、数字、其它符号
    // 判断长度
    if(s.size() > 8) require++;

    //判断种类数
    for(int i = 0; i < s.size(); i++) {
        //小写
        if(s[i] >= 'a' && s[i] <= 'z') {
            countTypes[0] = 1;
        }
        //大写
        else if(s[i] >= 'A' && s[i] <= 'Z') {
            countTypes[1] = 1;
        }
        //数字
        else if(s[i] >= '0' && s[i] <= '9') {
            countTypes[2] = 1;
        }
        //其它符号
        else {
            countTypes[3] = 1;
        }
    }
    for(int j = 0; j < 4; j++) {
        if(countTypes[j] == 1) flag++;
    }
    if(flag >= 3) require++;

    //判断子串重复
    int resubstr = 0;
    for(int i = 0; i < s.size()-3; i++) {
        for(int j = i+3; j<s.size()-3; j++) {
            if(s.substr(i,3)==s.substr(j,3)) resubstr = 1;
            if(resubstr != 0) break;
        }
        if(resubstr != 0) break;
    }
    if(resubstr == 0) require++;

    //final
    if(require == 3) cout<<"OK"<<endl;
    else cout<<"NG"<<endl;
}



int main() {
    string s;
    while(getline(cin,s)) {
        judgePassword(s);
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
05-16 11:16
已编辑
东华理工大学 Java
牛客737698141号:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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