解题思路:我们通过一个数组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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复