华为机试HJ20:密码验证合格程序

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ20:密码验证合格程序相关的知识,希望对你有一定的参考价值。

题目描述:

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有相同长度大于2的子串重复

输入描述:

一组或多组长度超过2的字符串。每组占一行

输出描述:

如果符合要求输出:OK,否则输出NG

示例:

输入:021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000

输出:OK NG NG OK

解题思路:

首先判断输入的密码长度是否大于等于8 ,满足条件1;再分别统计大写小写数字以及其他字符出现的个数,若某类字符出现次数不为0则让flag加一,flag大于等于3则满足条件2;因为不能有相同长度大于2的子串重复,也就是密码中任意3个字符的组合不能再出现第二次,那么可以从密码起点开始遍历,提取以某点为起点的三个字符组成一个新的子字符串,再从这个点后面的点开始查找有没有一样的字符串,若没找到则满足条件3。

测试代码:

#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;

int main()
{
    vector<string> input;
    vector<string> result;
    string in;
    while(cin>>in)
    {
        int lower=0;
        int upper=0;
        int number=0;
        int other=0;
        int flag=0;
        if(in.size()<=8)
        {
            result.push_back("NG");
            continue;
        }
        for(int i=0;i<in.size();++i)
        {
            if(in[i]>=65&in[i]<=90)
                upper++;
            else if(in[i]>=97&in[i]<=122)
                lower++;
            else if(in[i]>=48&in[i]<=57)
                number++;
            else
                other++;
        }
        if(lower!=0)flag++;
        if(upper!=0)flag++;
        if(number!=0)flag++;
        if(other!=0)flag++;
        if(flag<3)
        {
            result.push_back("NG");
            continue;
        }
        bool isfind=false;
        for(int i=0;i<in.size()-2;++i)
        {
            string temp=in.substr(i,3);
            if(in.find(temp,i+3)!=in.npos)
            {
                isfind=true;
                break;
            }
        }
        if(isfind)
        {
            result.push_back("NG");
            continue;
        }
        result.push_back("OK");
    }
    for(auto i:result)
    {
        cout<<i<<endl;
    }
    return 0;
}

以上是关于华为机试HJ20:密码验证合格程序的主要内容,如果未能解决你的问题,请参考以下文章

华为机试题 HJ20密码验证合格程序

华为python机试题目:计算字符个数简单错误记录简单密码进制转换句子逆序密码验证合格程序

牛客 HJ20 密码验证合格程序

华为机试HJ32:密码截取

华为机试HJ21:简单密码

华为机试HJ87:密码强度等级