解题思路:我们通过一个数组b【6】来储存我们对每个字符的判断。根据题意,如果输入了一个数字,那么b【1】++;如果输入了一个小写字母,那么b【2】++;如果输入了一个大写字母,那么b【3】++;输入规定字符,那么b【4】++,在while循环的最后添加一个n++计算密码位数。然后通过一个for循环,如果b【i】!=0,那么我们定义的一个k就k++。最后通过if语句,如果k>=3(至少有三种类型的输入方式),并且n>=8&&n<=16,输出“YES”,否则输出“NO”。

注意事项:记得每次循环的开始都要将数值初始化,防止对下面循环产生影响!

参考代码:

#include<stdio.h>

int main()

{


int b[6]={0,0,0,0,0},N,n=0,k;//定义我们需要的各种值

char c;

scanf("%d",&N);

getchar();//吃掉回车

for(int i=1;i<=N;i++)

{

int b[5]={0,0,0,0,0};n=0;k=0;//初始化步骤,不可缺少,否则影响下次循环

while((scanf("%c",&c))!=EOF)//可用while(1)替代

{

if(c=='\n')

break;

if(c>='0'&&c<='9')

b[1]++;

else if(c>='a'&&c<='z')

b[2]++;

else if(c>='A'&&c<='Z')

b[3]++;

else if(c=='~'||c=='!'||c=='@'||c=='#'||c=='$'||c=='%'||c=='^')

b[4]++;

else//可以删去,没必要计算其他字符产生的次数,当做辅助理解

b[5]++;

n++;//计算输入的字符数

}

for(int j=1;j<=4;j++)

{

if(b[j]!=0)

k++;

}

if(n>=8&&n<=16&&k>=3)

printf("YES\n");

else

printf("NO\n");

}

return 0;

}



点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论