(TOJ1395)密码

描述

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。 (2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为: 1.大写字母:A,B,C...Z; 2.小写字母:a,b,c...z; 3.数字:0,1,2...9; 4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。

输入

输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

输出

对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

样例输入

3
a1b2c3d4
Linle@ACM
^~^@^@!%

样例输出

NO
YES
NO
 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <ctype.h>
 4 #include <string.h>
 5 
 6 char a[52];
 7 
 8 int deal(char *s){
 9   int i,L,s1,s2,s3,s4,flag;
10     L=strlen(s);
11     s1=s2=s3=s4=0;
12     if(L<8 || L>16){
13         return 0;
14     }
15     for(i=0; i<L; i++)
16     {
17         if(isalpha(s[i])){
18             if(isupper(s[i]))  
19                s1++;
20             else s2++;
21         }
22         else if(isdigit(s[i])){
23             s3++;
24         } 
25         else if(s[i]=='~'||s[i]=='!'||s[i]=='@'
26              ||s[i]=='#'||s[i]=='$'||s[i]=='%'||s[i]=='^'){
27                  s4++;
28              }  
29     else{
30         flag=0; break;
31     }
32     } 
33     if(s1>0) s1=1;
34     if(s2>0) s2=1;
35     if(s3>0) s3=1;
36     if(s4>0) s4=1;
37     if(s1+s2+s3+s4>=3) return 1;
38     else return 0;
39 }
40 
41 void solve(){
42   int n;
43     scanf("%d",&n);
44     getchar();
45     while(n--){
46         gets(a);
47         if(deal(a)) printf("YES\n");
48         else printf("NO\n");
49     }    
50 }
51 
52 int main(){
53     solve();
54     return 0;
55 } 
 
作者:xueda120
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/xueda120/p/3093271.html