C检测安全密码网上流传一句话:"常在网上飘啊,哪能不挨刀啊~".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~".其实要想能安安心心地上网其实也不难,学点安全知识就可以.
首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16.
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组.
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码.
Input
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符.
Output
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO.
Sample Input
3
a1b2c3d4
Linle@ACM
^~^@^@!%
Sample Output
NO
YES
NO
我的代码在自己电脑上测试能顺利通过,为什么就是没法AC
#include
#include
int main()
{
int a,i,j;
char s[51];
scanf("%d",&a);
for(i=0;i=8&&strlen(s)
switch(1)
{
case 1:if(s[j]>='a'&&s[j]<='z') flag[0]=1;
case 2:if(s[j]>='A'&&s[j]<='Z') flag[1]=1;
case 3:if(s[j]>='0'&&s[j]<='9') flag[2]=1;
case 4:if(s[j]=='~'||s[j]=='!'||s[j]=='@'||s[j]=='#'||s[j]=='$'||s[j]=='%'||s[j]=='^') flag[3]=1;
}
这个写法真奇葩 不过原则上来说 虽然看着别扭 但是这部分还真没问题
你这个代码不能AC的原因在于getchar的位置
在for(i=0;i<a;i++)开头 你调用了一个getchar
想必是要用它略去输入a时候的回车 这个想法是正确的
可是接下来循环中用的是gets 这个函数可不会剩下个回车给你
再getchar就把下一个输入的第一个字符给略去了
所以在多组输入下 就可能出错了
比如
1asfasdfD这个输入 如果不放在第一个 就会输出NO 但实际上它是YES
再如sdfVX~11 如sdf~sdJSSUUd12456
都会输出错误
修改方式
把getchar移到for上面就可以了
你试试吧
修改后代码 switch那段我就不改了
#include#include
int main()
{
int a,i,j;
char s[51];
scanf("%d",&a);
getchar();//move to here
for(i=0;i {
gets(s);
if(strlen(s)>=8&&strlen(s)<=16)
{
int flag[4]={0,0,0,0};
for(j=0;j
switch(1)
{
case 1:if(s[j]>='a'&&s[j]<='z') flag[0]=1;
case 2:if(s[j]>='A'&&s[j]<='Z') flag[1]=1;
case 3:if(s[j]>='0'&&s[j]<='9') flag[2]=1;
case 4:if(s[j]=='~'||s[j]=='!'||s[j]=='@'||s[j]=='#'||s[j]=='$'||s[j]=='%'||s[j]=='^') flag[3]=1;
}
}
if(flag[0]+flag[1]+flag[3]+flag[2]>=3)
printf("YES\n");
else
printf("NO\n");
}
else printf("NO\n");
}
}
因特网核心层路由器要保证对于整个因特网每个地址的可达性,但是如果让每台核心路由器都保存全因特网上每一 2020-05-31 …
公司尚未向InterNIC申请永久网络ID,这样,您可以使用保留给专有内部网的B网络ID172.16 2020-05-31 …
公司尚未向InterNIC申请永久网络ID,这样,您可以使用保留给专有内部网的B类网络ID172.1 2020-05-31 …
公司尚未向InterNIC申请永久网络ID,这样,您可以使用保留给专有内部网的B类网络ID172.1 2020-05-31 …
计算机网络c类网络划分子网一个单位有一个c类网络200.1.1,它有四个部门,主机数分别为:a部门 2020-06-17 …
关于子网的划分使用59.17.148.64/26划分3个子网,其中第一个子网能容纳13台主机,第二 2020-07-18 …
IP地址计算使用59.67.148.64/26划分3个子网,其中第一个子网能容纳13台主机,第二个 2020-07-18 …
B类网络地址,设计一个子网结构满足所述需求。(1)对于B类地址172.16.0.0,XYZ公司想要 2020-07-18 …
寝室有abcd四台电脑一个路由四台都能上网我的电脑f接上ad的线可以上网接上bc的闲就本地连接受限制 2020-11-21 …
子网网段划分如果将59.67.59.128/25划分成3个子网,其中第一个子网能容纳60台主机,另外 2021-01-08 …