解题思路:先判断字符串是否大于等于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;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论