(HDOJ 2043)密码

 

密码


Problem Description

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。
 

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

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

Sample Input
 
     
3

a1b2c3d4 

Linle@ACM 

^~^@^@!%

 

Sample Output
 
     
NO

YES 

NO

 
   AC code:

  #include<stdio.h>

#include < math.h >
#include
< ctype.h >
#include
< string .h >
#include
< stdlib.h >

int  main()
{
     
int  n,a[ 6 ];
     
char  c;
     scanf(
" %d%*c " , & n);
     
while (n -- ){
     a[
0 ] = a[ 1 ] = a[ 2 ] = a[ 3 ] = a[ 4 ] = a[ 5 ] = 0 ;
     
while ((c = getchar()) != ' \n ' ){
          
if (isupper(c))
            a[
0 ] = a[ 5 ] ++ ;
          
else   if (islower(c))
            a[
1 ] = a[ 5 ] ++ ;
          
else   if (isdigit(c))
            a[
2 ] = a[ 5 ] ++ ;
          
else
            a[
3 ] = a[ 5 ] ++ ;
         }
         
if (a[ 0 ]) a[ 4 ] ++ ;
         
if (a[ 1 ]) a[ 4 ] ++ ;
         
if (a[ 2 ]) a[ 4 ] ++ ;
         
if (a[ 3 ]) a[ 4 ] ++ ;
      puts(a[
4 ] > 2   &&  a[ 5 ] > 7   &&  a[ 5 ] < 17   ?   " YES " : " NO " ); 
     
         }
      
return   0 ;
} 

 

 

转载于:https://www.cnblogs.com/cpoint/archive/2011/04/25/2026607.html

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