题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
又一绑架算力作品
内存能否原谅我
循环判断老生常谈
寻找重复子串记得限制条件要比要求最长的大1
记得同时考虑两个循环嵌套的停止条件,要和最长子串相匹配
一个容易被忽略的点是标志位类的变量要在循环再次开始之前复位
否则容易造成上一次循环遗留下来的标志位影响下一次循环结果。
#include<string.h>
char input[100];
int len,i=0,j=0,k=0,f1=0,f2=0,f3=0,f4=0,flag=0;
int main()
{
while(scanf("%s\n",input)!=EOF)
{
f1=0;//复位
f2=0;
f3=0;
f4=0;
len =strlen(input);
if(len<8)//条件1
{
printf("NG\n");
}
else
{
{
for(i=0;i<len;i++)//条件2
{
if((input[i]>='0')&&(input[i]<='9'))//不能用连等
f1=1;
else if((input[i]>='A')&&(input[i]<='Z'))
f2=1;
else if((input[i]>='a')&&(input[i]<='z'))
f3=1;
else
f4=1;
}
if((f1+f2+f3+f4)<3)
printf("NG\n");
else
{
//条件3
flag=0;
for(i=0;i<len-6;i++)
{
for(j=i+3;j<len-3;j++)
{
if((input[i]==input[j])&&(input[i+1]==input[j+1])&&(input[i+2]==input[j+2]))
{
flag=1;
}
}
}
if(flag==1)
printf("NG\n");
else
printf("OK\n");
}
}
}
}
}