zoukankan      html  css  js  c++  java
  • php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码)

    php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码)

    一、总结

    一句话总结:复杂问题分类,超简单的。分类+规范编码。

    1、写的时候判断  不能有相同长度超2的子串重复  的时候,子串重复写成隔2位置了?

    应该是任意的

    47             for($j=$ii+2;$j<$len;$j++){

    2、分类,把大问题化小,就会非常简单?

     4     //1、判断长度
     5     if(!isLength($str)){
     6         echo 'NG'.PHP_EOL;
     7     }
     8     //2、判断包括大小写字母.数字.其它符号,以上四种至少三种
     9     else if(!isMulti($str)){
    10         echo 'NG'.PHP_EOL;
    11     }
    12     //3、判断不能有相同长度超2的子串重复
    13     else if(hasSubstr($str)){
    14         echo 'NG'.PHP_EOL;
    15     }else{
    16         echo 'OK'.PHP_EOL;
    17     }

    3、写的时候判断  不能有相同长度超2的子串重复  的时候,返回逻辑出错?

    有相同子串返回true,没有相同子串返回false,逻辑弄反了

    56                 if($count==3) return true;
    57 
    58             }
    59             
    60         }
    61         return false;

    4、多组输入如何解决?

    while

     3 while($str=trim(fgets(STDIN))){

    5、判断 包括大小写字母.数字.其它符号,以上四种至少三种 怎么写?

    分类+正则+统计分类合格情况

    26 function isMulti($str){
    27     $myType=0;
    28     //有数字
    29     if(preg_match('/d/',$str)) $myType++;
    30     //有大写字母
    31     if(preg_match('/[A-Z]/',$str)) $myType++;
    32     //有小写写字母
    33     if(preg_match('/[a-z]/',$str)) $myType++;
    34     //有其它字符
    35     $str2=preg_replace('/[A-Za-z0-9]/','',$str);
    36     $len2=strlen($str2);
    37     if($len2>=1) $myType++;
    38     
    39     if($myType>=3) return true;
    40     else return false;
    41 }

    二、密码验证合格程序

    题目描述

    密码要求:

    1.长度超过8位

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

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

    说明:长度超过2的子串

    输入描述:

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

    输出描述:

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

    示例1

    输入

    复制
    021Abc9000
    021Abc9Abc1
    021ABC9000
    021$bc9000
    

    输出

    复制
    OK
    NG
    NG
    OK

    代码:

     1 <?php
     2 //分类来解决情况比较多或者稍微复杂一点的情况
     3 while($str=trim(fgets(STDIN))){
     4     //1、判断长度
     5     if(!isLength($str)){
     6         echo 'NG'.PHP_EOL;
     7     }
     8     //2、判断包括大小写字母.数字.其它符号,以上四种至少三种
     9     else if(!isMulti($str)){
    10         echo 'NG'.PHP_EOL;
    11     }
    12     //3、判断不能有相同长度超2的子串重复
    13     else if(hasSubstr($str)){
    14         echo 'NG'.PHP_EOL;
    15     }else{
    16         echo 'OK'.PHP_EOL;
    17     }
    18 }
    19 
    20 function isLength($str){
    21     $len=strlen($str);
    22     if($len>8) return true;
    23     else return false;
    24 }
    25 
    26 function isMulti($str){
    27     $myType=0;
    28     //有数字
    29     if(preg_match('/d/',$str)) $myType++;
    30     //有大写字母
    31     if(preg_match('/[A-Z]/',$str)) $myType++;
    32     //有小写写字母
    33     if(preg_match('/[a-z]/',$str)) $myType++;
    34     //有其它字符
    35     $str2=preg_replace('/[A-Za-z0-9]/','',$str);
    36     $len2=strlen($str2);
    37     if($len2>=1) $myType++;
    38     
    39     if($myType>=3) return true;
    40     else return false;
    41 }
    42 
    43     function hasSubstr($str){
    44         $len=strlen($str);
    45         for($i=0;$i<$len;$i++){
    46             $ii=$i;
    47             for($j=$ii+2;$j<$len;$j++){
    48                 $jj=$j;
    49                 $count=0;
    50                 while($jj<$len&&$count<=2&&$str[$ii]==$str[$jj]){
    51                     //echo $str[$ii]." ".$str[$jj].PHP_EOL;
    52                     $ii++;
    53                     $jj++;
    54                     $count++;
    55                 }
    56                 if($count==3) return true;
    57 
    58             }
    59             
    60         }
    61         return false;
    62     }
    63 
    64 ?>
     
  • 相关阅读:
    Linux(CentOS)下安装OMNet++
    Linux(CentOS)安装JDK
    给电脑安装Linux系统(CentOS)
    OmNet++遇到的问题
    数论倒数总结
    [AHOI2007]密码箱
    [AHOI2005]约数研究
    Spark scala groupBy后求和
    Scala Seq创建简单的Spark DataFrame
    Spark DataFrame分组后选取第一行
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9212879.html
Copyright © 2011-2022 走看看