题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <stdio.h>
#include <string.h>
int main(){
char str[101];
int a,b,c,d,flag; //a数字、b大写字母、c小写字母、d其他字符
while(scanf("%s",str) != EOF){
a = b = c = d = flag = 0;
int len = strlen(str);
if(len > 8){ //长度大于8
for(int i = 0; i < len; i++){
if(str[i] >= '0' && str[i] <= '9'){ //判断是否含数字
a = 1;
}else if(str[i] >= 'A' && str[i] <= 'Z'){ //判断是否含大写字母
b = 1;
}else if(str[i] >= 'a' && str[i] <= 'z'){ //判断是否含小写字母
c = 1;
}else if(str[i] != ' ' && str[i] != '\n'){
d = 1;
}
}
//大于等于3符合条件
if(a + b + c + d < 3) printf("NG\n");
else{ //在大于等于3的基础上继续判断 是否含有长度大于2的公共子串
/*判断字符串是否包含长度超 2 的两个以上相同子串,
故考虑长度为 3 的子字符串是否有重复即可
*/
for(int i = 0; i <= len - 6; i++){
for(int j = i + 3; j <= len -3; j++){
if(str[i] == str[j] && str[i+1] == str[j+1] && str[i+2] == str[j+2]){
flag = 1; //存在重复子串则不符合
goto here;
}
}
}
here: if(!flag) printf("OK\n");
else printf("NG\n");
}
}else printf("NG\n");
}
return 0;
}
无
无