#include <ctype.h> #include <stdio.h> #include <string.h> int main() { int i; char buf[100] = {0}; //逐行循环读取密码 while(scanf("%s", buf) != EOF) { int len = strlen(buf); int same_flag = 0; int upper_flag = 0; int lower_flag = 0; int digit_flag = 0; int special_flag = 0; //长度不小于8 if(len < 8) { printf("NG\n"); continue; } else { //判断是否满足大写字母,小写字母,数字,特殊字符至少三种 for(i = 0; i<len; i++) { if(buf[i]>=33 && buf[i] <=126) { if(buf[i]>='A' && buf[i]<='Z') { upper_flag=1; } else if(buf[i]>='a' && buf[i]<='z') { lower_flag=1; } else if(buf[i]>='0' && buf[i]<='9') { digit_flag=1; } else { special_flag=1; } } else { printf("NG\n"); break; } } int cnt = upper_flag+lower_flag+digit_flag+special_flag; if((cnt < 3)) { printf("NG\n"); } else {//长度满足,类型满足,最后判断是否存在相同的子串 for(i=0; (same_flag==0)&&(i<len-5); i++) { for(int j=i+3; j<len-2; j++) { if((buf[i]==buf[j]) && (buf[i+1]== buf[j+1]) && (buf[i+2]==buf[j+2])) { same_flag = 1; } } } if(same_flag==1) { printf("NG\n"); } else{ printf("OK\n"); } } } } return 0; }