解题思路:我们通过一个数组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 人评分
浏览:626 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:524 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:767 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:609 |
矩形面积交 (C++代码)浏览:1204 |
Tom数 (C语言代码)浏览:758 |
敲七 (C语言代码)浏览:2747 |
生日日数 (C语言代码)浏览:1574 |
老王赛马 (C++代码)浏览:973 |