解题思路:我们通过一个数组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语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:424 |
拆分位数 (C语言代码)浏览:1322 |
C语言考试练习题_排列 (C语言代码)浏览:717 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:931 |
printf基础练习2 (C语言代码)浏览:746 |
1157题解浏览:710 |
1014题解浏览:484 |
1025题解浏览:732 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1904 |
C二级辅导-公约公倍 (C语言代码)浏览:481 |