解题思路:
定义四个变量 且初值设置为0:
int numofdaxie; 等于0表示大写没出现,等于1表示出现
int numofxiaoxie;等于0表示小写没出现,等于1表示出现
int shuzi;等于0表示数字没出现,等于1表示出现
int specialword;等于0表示特殊没出现,等于1表示出现
当密码长度小于8或大于16密码不合格;
当密码长度大于等于8并且numofdaxie+numofxiaoxie+shuzi+specialword>=3时,密码合格;
当密码长度大于等于8并且numofdaxie+numofxiaoxie+shuzi+specialword<3时,密码不合格;
若长度符合条件,从第一个字符开始遍历,比如当大写字母首次出现时,把numofdaxie置为1,之后再次出现大写字母,不做 任何操作;其它三种字符处理同理;
if(password[i]>='A'&&password[i]<='Z'&&(*numofdaxie==0)) (*numofdaxie)++;
每次遍历时,判断numofdaxie+numofxiaoxie+shuzi+specialword是否大于等于3,是则输出YES且跳出循环;
若循环正常结束没有跳出,则说明numofdaxie+numofxiaoxie+shuzi+specialword<3,判断一下输出NO即可;
注意事项:
输出带换行符,每判断新的密码上述4个变量初值更新为0;
参考代码:
#include<stdio.h> #include<string.h> void function(char *password,int *numofdaxie,int *numofxiaoxie,int *shuzi,int *specialword); void format(int *numofdaxie,int *numofxiaoxie,int *shuzi,int *specialword); /*------------------------------------------------------------------------------------------------*/ int main() { char password[20]; int n; int numofdaxie; int numofxiaoxie; int shuzi; int specialword; scanf("%d",&n); getchar(); for(int i=0;i<n;i++) { gets(password); format(&numofdaxie,&numofxiaoxie,&shuzi,&specialword); function(password,&numofdaxie,&numofxiaoxie,&shuzi,&specialword); } return 0; } /*------------------------------------------------------------------------------------------------*/ void format(int *numofdaxie,int *numofxiaoxie,int *shuzi,int *specialword) { (*numofdaxie)=0; (*numofxiaoxie)=0; (*shuzi)=0; (*specialword)=0; } /*------------------------------------------------------------------------------------------------*/ void function(char *password,int *numofdaxie,int *numofxiaoxie,int *shuzi,int *specialword) { int length=strlen(password); if(length<8||length>16) { printf("NO\n"); return ; } for(int i=0;i<length;i++) { if(password[i]>='A'&&password[i]<='Z'&&(*numofdaxie==0)) (*numofdaxie)++; if(password[i]>='a'&&password[i]<='z'&&(*numofxiaoxie==0)) (*numofxiaoxie)++; if(password[i]>='0'&&password[i]<='9'&&(*shuzi==0)) (*shuzi)++; if((password[i]=='~'||password[i]=='!'||password[i]=='@'||password[i]=='#'||password[i]=='$'||password[i]=='%'||password[i]=='^')&&(*specialword==0)) (*specialword)++; if((*numofdaxie)+(*numofxiaoxie)+(*shuzi)+(*specialword)>=3) {printf("YES\n");break;} } if((*numofdaxie)+(*numofxiaoxie)+(*shuzi)+(*specialword)<3) printf("NO\n"); return; }
别忘点赞哦-.-
0.0分
12 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复