[华为机试练习题]31.密码验证合格程序

简介:

题目

描述:  密码要求:

1.长度超过8位

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

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

说明:长度超过2的子串


题目类别:  字符串,数组  
难度:  中级  
运行时间限制: 10Sec 
内存限制: 128MByte 
阶段:  入职前练习  
输入:  
一组或多组长度超过2的子符串。每组占一行

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

每行输出对应一组输入的结果;

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

样例输出: OK
NG
NG
OK

代码

/*---------------------------------------
*   日期:2015-07-01
*   作者:SJF0115
*   题目:密码验证合格程序
*   来源:华为上机
-----------------------------------------*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <list>
using namespace std;

bool CheckPasswd(string str){
    int size = str.size();
    if(size <= 8){
        return false;
    }//if
    int isNum = 0,isLower = 0,isUpper = 0,isOther = 0;
    int total = 0;
    for(int i = 0;i < size;++i){
        // 字母
        if(str[i] >= 'a' && str[i] <= 'z'){
            isLower = 1;
        }//if
        else if(str[i] >= 'A' && str[i] <= 'Z'){
            isUpper = 1;
        }//else
        else if(str[i] >= '0' && str[i] <= '9'){
            isNum = 1;
        }//else
        else{
            isOther = 1;
        }//else
        total = isNum + isLower + isUpper + isOther;
        if(total >= 3){
            break;
        }//if
    }//for
    //包括大小写字母.数字.其它符号,以上四种至少三种
    if(total < 3){
        return false;
    }//if
    // 暴力
    int s1,s2,count = 0;
    for(int i = 0;i < size;++i){
        for(int j = i + 1;j < size;++j){
            s1 = i,s2 = j;
            while(s1 < size && s2 < size && str[s1] == str[s2]){
                ++count;
                ++s1;
                ++s2;
                if(count >= 3){
                    return false;
                }//if
            }//if
            count = 0;
        }//for
    }//for
    return true;
}

int main(){
    string str;
    bool result;
    while(getline(cin,str)){
        result = CheckPasswd(str);
        if(result){
            cout<<"OK"<<endl;
        }//if
        else{
            cout<<"NG"<<endl;
        }//else
    }//while
    return 0;
}

查找相同的子串时使用暴力法待改进。。。。。。。

目录
相关文章
|
3月前
|
移动开发 前端开发 API
期末测试——H5方式练习题
期末测试——H5方式练习题
22 0
|
5月前
|
存储 数据挖掘 数据安全/隐私保护
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题
78 1
|
5月前
|
存储 算法 Java
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(下)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
84 1
|
4月前
|
数据安全/隐私保护
HJ20 密码验证合格程序
HJ20 密码验证合格程序
23 0
|
6月前
|
Java
hdu1279 验证角谷猜想
hdu1279 验证角谷猜想
20 0
|
7月前
|
数据安全/隐私保护
华为机试HJ20:密码验证合格程序
华为机试HJ20:密码验证合格程序
|
9月前
|
机器学习/深度学习 数据安全/隐私保护
(leecode)密码检查
小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求: 1. 密码只能由大写字母,小写字母,数字构成; 2. 密码不能以数字开头; 3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种; 4. 密码长度至少为8
44 0
(leecode)密码检查
|
10月前
|
数据采集 数据挖掘 Python
【每周一坑】验证哥德巴赫猜想
尽管对于大多数人来说,无法看懂哥德巴赫猜想及相关问题的证明。不过我们借助计算机,可以快速地判断一个数是否符合哥德巴赫猜想。(只需在判断质数的代码基础上加上两三行。)
|
数据安全/隐私保护
牛客网OR141 密码检查——“C”
牛客网OR141 密码检查——“C”
|
数据安全/隐私保护