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

简介: 华为机试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;
}
相关文章
|
6月前
|
C++
【PTA】L1-016 验证身份(C++)
【PTA】L1-016 验证身份(C++)
86 0
【PTA】L1-016 验证身份(C++)
|
5月前
|
数据安全/隐私保护
1067 试密码 (20 分)
1067 试密码 (20 分)
|
6月前
|
安全 BI 数据安全/隐私保护
每天一道C语言编程:合格密码的判定
每天一道C语言编程:合格密码的判定
44 0
|
6月前
|
数据安全/隐私保护
HJ20 密码验证合格程序
HJ20 密码验证合格程序
45 0
|
Java
hdu1279 验证角谷猜想
hdu1279 验证角谷猜想
54 0
验证“哥德巴赫猜想”
验证“哥德巴赫猜想”
51 0
|
安全 数据安全/隐私保护
华为机试HJ87:密码强度等级
华为机试HJ87:密码强度等级
|
算法 安全 数据安全/隐私保护
华为机试HJ21:简单密码
华为机试HJ21:简单密码
|
机器学习/深度学习 数据安全/隐私保护
(leecode)密码检查
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求: 1. 密码只能由大写字母,小写字母,数字构成; 2. 密码不能以数字开头; 3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种; 4. 密码长度至少为8
72 0
(leecode)密码检查
|
数据采集 数据挖掘 Python
【每周一坑】验证哥德巴赫猜想
尽管对于大多数人来说,无法看懂哥德巴赫猜想及相关问题的证明。不过我们借助计算机,可以快速地判断一个数是否符合哥德巴赫猜想。(只需在判断质数的代码基础上加上两三行。)