网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不难,学点安全知识就可以。首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:(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

基本思路
主要处理的是判断有多少种字符,这里是分别设置四个标识符来判断是否有这种对应的字符

#include<stdio.h>
#include<string.h>
#define N 50
int check1(char a[]);
int main()
{
   
	int M;
	char a[N];
	int b[N]={
   0},count=0,num;
	int i,j,k;
	
	scanf("%d\n",&M);
	
	for(i=0;i<M;i++)
	{
   
		gets(a);
		num=strlen(a);             //计算字符串的长度,若长度小于8则不安全 
		
		if(num<8)
		b[i]=1;
		else if(check1(a)<3)      //字符串中不到3种字符,那么不安全记为1;安全记为0; 
		b[i]=1;
		
	}
	
	for(i=0;i<M;i++)
	{
   
		if(b[i]==1)
		printf("no\n");
		else printf("yes\n");
	}
		
}

int check1(char a[])
{
   
	int e,b,c,d;
	int count=0;
	int i=0;

	e=0;b=0;c=0;d=0;
	for(i=0;a[i]!='\0';i++)
	{
   
		if(a[i]>='a'&&a[i]<='z')             //若存在该种字符则记为1,这里不为计数,只作为一种标识符 
	    	e=1;
	    if(a[i]>='A'&&a[i]<='Z')
	        b=1;
	    if(a[i]>='0'&&a[i]<='9')
	        c=1;
		if(a[i]=='~'||a[i]=='!'||a[i]=='#'||a[i]=='@'||a[i]=='$'||a[i]=='^')
		    d=1;
	}
		return e+b+c+d;
 }