首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

简单c语言题密码,小弟我错在哪

2013-12-10 
简单c语言题密码,我错在哪Problem Description网上流传一句话:常在网上飘啊,哪能不挨刀啊~。其实要想能安

简单c语言题密码,我错在哪
Problem Description

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(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
 

#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,o,p,q,s;
char a[50];
while(~scanf("%d",&n))
{
while(n--)
{o=0;p=0;q=0;s=0;
getchar();
gets(a);
if(strlen(a)>=8&&strlen(a)<=16)
{
for(i=0;i<strlen(a);i++)
{
if(a[i]>='a'&&a[i]<='z')o++;
if(a[i]>='A'&&a[i]<='Z')p++;
if(a[i]>='0'&&a[i]<='9')q++;
if(a[i]=='~'||a[i]=='!'||a[i]=='@'||a[i]=='#'||a[i]=='$'||a[i]=='%'||a[i]=='^') 
s++;
}
if((o>0&&p>0&&q>0)||(o>0&&p>0&&q>0&&s>0)) printf("YES\n");
else if((o>0&&p>0&&s>0)||(o>0&&p>0&&q>0&&s>0)) printf("YES\n");
else if((o>0&&q>0&&s>0)||(o>0&&p>0&&q>0&&s>0)) printf("YES\n");
else if((p>0&&q>0&&s>0)||(o>0&&p>0&&q>0&&s>0)) printf("YES\n");
else printf("NO\n");
}
else printf("NO\n");
}
}
return 0;
}

[解决办法]
scanf返回的是接收到的变量的个数
对这个返回值取反是个什么意思呢?
判定数字用isalpha(),判定小写用islower(),判定大写用isupper()
判断4中情况有3中只用给每种情况(代码中的o,p,q,s)符合时设置1,最后判断4个数之和是否大于2

热点排行