题目描述
网络上各类交易活动越来越普及,为了能够安安心心地上网,经常需要设置一个安全的密码。一般来说一个比较安全的密码至少应该满足下面两个条件:
(1)密码长度大于等于8。
(2)密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
(1)大写字母:A,B,C...Z;
(2)小写字母:a,b,c...z;
(3)数字:0,1,2...9;
(4)特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入
输入数据有多组,每组占一行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
样例输入
a1b2c3d4 Linle@ACM ^~^@^@!%
样例输出
NO YES NO
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main()
{char ch[55];int len,count=0,i;int flag1=0,flag2=0,flag3=0,flag4=0;memset(ch,0,sizeof(char)*55);while((scanf("%s",ch))!=EOF){len=strlen(ch);///取出该数组的长度 for(i=0;i<len;i++){if(ch[i]>=48&&ch[i]<=57&&flag1==0)///(1)数字:0,1,2...9且还没有被访问过(只是该类型而已) {flag1=1;count++; }else if(ch[i]>='A'&&ch[i]<='Z'&&flag2==0)///(2)大写字母:A,B,C...Z;{flag2=1;count++;}else if(ch[i]>='a'&&ch[i]<='z'&&flag3==0)///(3)小写字母:a,b,c...z;{flag3=1;count++;}else ///(4)特殊符号:~,!,@,#,$,%,^; {if(flag4==0){if(ch[i]=='~'||ch[i]=='!'||ch[i]=='@'||ch[i]=='#'||ch[i]=='$'||ch[i]=='%'||ch[i]=='^') {flag4=1;count++;}}}}///printf("count的数为:%d\n",count);这是我检测我的代码有没有问题而已,oj是必须按照严格的标准格式来输出,否则将会出错 if(count>=3&&len>=8)printf("YES\n");elseprintf("NO\n");count=0;memset(ch,0,sizeof(char)*55);flag1=0,flag2=0,flag3=0,flag4=0;///初始化,才不会出错 } return 0;
}