问题描述 |
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。 首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件: (1).密码长度大于等于8,且不要超过16。 (2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。 这四个字符类别分别为: 1.大写字母:A,B,C...Z; 2.小写字母:a,b,c...z; 3.数字:0,1,2...9; 4.特殊符号:~,!,@,#,$,%,^; 给你一个密码,你的任务就是判断它是不是一个安全的密码。 |
输入 |
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。 |
输出 |
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。 |
输入样例 |
3 a1b2c3d4 Linle@ACM ^~^@^@!% |
输出样例 |
NO YES NO |
C 控制结构 密码
- 提问者网友:抽煙菂渘情少年
- 2021-04-27 23:11
- 五星知识达人网友:轻熟杀无赦
- 2021-04-27 23:25
#include <stdio.h>
#include <string.h>
int main()
{
int result[100]={0};
char buff[50];
int M=0,i,j,sum=0;
bool cnt[4]={false},is=true;
scanf("%d",&M);
for(i=0;i<M;i++)
{
sum=0;
is=true;
for(j=0;j<4;j++) cnt[j]=false;
memset(buff,0,strlen(buff));
getchar();
scanf("%s",buff);
if(strlen(buff)<8||strlen(buff)>16)
is=false;
for(j=0;j<strlen(buff);j++)
{
if(buff[j]>='0'&&buff[j]<='9')
cnt[0]=true;
else if(buff[j]>='a'&&buff[j]<='z')
cnt[1]=true;
else if(buff[j]>='A'&&buff[j]<='Z')
cnt[2]=true;
else cnt[3]=true;
}
sum=cnt[0]+cnt[1]+cnt[2]+cnt[3];
if(is&&sum>=3)
result[i]=1;
else result[i]=0;
}
for(i=0;i<M;i++)
{
if(result[i])
printf("Yes ");
else
printf("No ");
}
return 0;
}
- 1楼网友:上分大魔王
- 2021-04-28 00:17
先读入行数,设定循环次数
循环内根据asc码进行判定,设置四个标志位,顺序读入密码,包含对应种类就置位,最后看标志位返回结果
退出循环