描述

密码要求:

1.长度超过8位

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

3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)

数据范围:输入的字符串长度满足1n100 

输入描述:

一组字符串。

输出描述:

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

示例1

输入:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出:
OK
NG
NG
OK
代码部分:
#include <stdio.h>
#include <string.h>
//以下是Senky的代码:
int Judge_len(char* str, int len) { //判断长度
    int is_length=0;
    if (len >= 8) is_length = 1;
    return is_length;
}

int Judge_num(char s) { //判断数字
    int is_number=0;
    if (s >= '0' && s <= '9') {
        is_number = 1;
    }
    return is_number;
}

int Judge_gra_low(char s) { //判断小写字母
    int is_gra_low=0;
    if (s >= 'a' && s <= 'z') {
        is_gra_low = 1;
    }
    return is_gra_low;
}

int Judge_gra_up(char s) { //判断大写字母
    int is_gra_up=0;
    if (s >= 'A' && s <= 'Z') {
        is_gra_up = 1;
    }
    return  is_gra_up;
}

int Judge_repeat(char* str, int len) { //长度大于2的子串重复就一定会有长度为3的子串重复
    int no_repeat=1;
    for (int i = 0; i < len - 3; i++) {
        for (int j = i+1; j < len - 3; j++) {
            if (str[i] == str[j] && 
                str[i + 1] == str[j + 1] && 
                str[i + 2] == str[j + 2]) {
                no_repeat = 0;
                return no_repeat;
            }
        }
    }
    return no_repeat;
}

void start() {
    char str[101];
    while (scanf("%s", str) != EOF) {
        int len = strlen(str);
        int is_length=0;//字符串长度合格标志
        int is_number = 0; //字符串数字合格标志
        int is_gra_low = 0; //字符串小写字母标志
        int is_gra_up = 0; //字符串大写字母标志
        int char_flag = 0; //有字符的标志
        int no_repeat = 1; //字符串没有重复子串的标志

        is_length=Judge_len(str, len); //长度是否合格

        for (int i = 0; i < len ; i++) {
            if (Judge_num(str[i])) is_number=1;//有数字
            else if(Judge_gra_low(str[i])) is_gra_low=1;//有小写
            else if(Judge_gra_up(str[i])) is_gra_up=1;//有大写
            else char_flag = 1; //有字符
        }

        no_repeat =Judge_repeat(str, len); //2个以上的重复子串
        
        //调试部分
        // printf("长度:%d\n", is_length);
        // printf("数字:%d\n", is_number);
        // printf("小写:%d\n", is_gra_low);
        // printf("大写:%d\n", is_gra_up);
        // printf("重复:%d\n", no_repeat);

        if (is_length && 
           (3 <= is_number + is_gra_low + is_gra_up + char_flag) &&
            no_repeat) {
            printf("OK\n");
        }else printf("NG\n");

    }
}

int main() {
    start();
    return 0;//编辑于2022/10/13
}
总结
①程序看起来代码没必要这么大量,但是为了维护程序的结构性,因此写的比较有逻辑和条理,读起来可以说毫不费劲 
 当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;