解题思路:先判断字符串是否大于等于8而且小于等于16,如果不是,则表示密码不安全,后面的就不用继续判断了。然后再判断每一种字符是否出现,如果第一次出现,则count++,以后再出现,就不加了。然后判断如果count=3则表示是满足要求的密码,就不再判断。最后根据count的值是否为3输出YES,或者NO。
参考代码:#include
#include
int main()
{
char psw[55];
int i,n,count,len;
int flag1,flag2,flag3,flag4;
scanf("%d",&n);
while(n--)
{
scanf("%s",psw);
len=strlen(psw);
if(len<8 || len>16)
{
printf("NO\n");
continue;
}
count=0;
flag1=flag2=flag3=flag4=0;
for(i=0;psw[i];i++)
{
if(psw[i]>='A' && psw[i]<='Z') //大写字母
{
if(flag1==0) //是否第一次出现
{
count++;
flag1=1;
}
}
else if(psw[i]>='a' && psw[i]<='z') //小写字母
{
if(flag2==0) //是否第一次出现
{
count++;
flag2=1;
}
}
else if(psw[i]>='0' && psw[i]<='9' ) //数字字符
{
if(flag3==0) //是否第一次出现
{
count++;
flag3=1;
}
}
else if(psw[i]=='~'||psw[i]=='!'||psw[i]=='@'||psw[i]=='#'||psw[i]=='$'||psw[i]=='%'||psw[i]=='^')
{
if(flag4==0) //是否第一次出现
{
count++;
flag4=1;
}
}
if(count==3) break; //如果count=3,表示已经出现了3中字符,则不用继续判断
}
if(count==3)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}