(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 } 
 

你可能感兴趣的:(密码)