解题思路:先判断字符串是否大于等于8而且小于等于16,如果不是,则表示密码不安全,后面的就不用继续判断了。然后再判断每一种字符是否出现,如果第一次出现,则count++,以后再出现,就不加了。然后判断如果count=3则表示是满足要求的密码,就不再判断。最后根据count的值是否为3输出YES,或者NO。
参考代码:
#include<stdio.h> #include <string.h> 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; }
0.0分
0 人评分