轮回演绎


私信TA

用户名:zjh1509691972

访问量:7704

签 名:

等  级
排  名 1162
经  验 3140
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

解题思路:我们通过一个数组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 人评分

  评论区

  • «
  • »