解题思路:
定义四个变量 且初值设置为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分
19 人评分
#include <iostream> #include <cctype> #include <cstring> int main() { int M; std::cin>>M; for(int j = 0;j < M;j++){ char a[50]; std::cin>>a; std::string str = a;//存到字符串中,方便求长度 int n = str.length();//获取密码的长度 if(n < 8||n > 16){ std::cout<<"NO"<<std::endl; continue; //密码太短,跳进下一循环 } int b,c,d,e; b = c = d = e = 0; for(int i =0;i < n;i++){ b += ispunct(a[i]); c += isdigit(a[i]); d += islower(a[i]); e += isupper(a[i]); } int f = (b>0) + (c>0) + (d>0) + (e>0);//用逻辑运算计算出现的字符种类 if(f >= 3) std::cout<<"YES"<<std::endl; else std::cout<<"NO"<<std::endl;
20212320 2021-10-24 16:26:42 |
超过了评论输出限度,后面结尾部分没打出来,不过后面除了括号,return 0也没啥了。我这个是哪儿错了啊?提交显示WA50
为什么要在输入n后面加一个getchar()呢?
詹鸿培 2021-04-18 20:59:46 |
吸收空格
詹鸿培 2021-04-18 21:00:13 |
#include<stdio.h> #include<string.h> int main () { char a[100]; int i=0,e=0,b=0,c=0,d=0,m=0; scanf("%d",&m); getchar(); while(m>0) { gets(a); m--; i=0,e=0,b=0,c=0,d=0; for(i=0;i<strlen(a);i++) { if(a[i]>='A'&&a[i]<='Z') { e=1; } if(a[i]>='a'&&a[i]<='z') { b=1; } if(a[i]>='0'&&a[i]<='9') { c=1; } if(a[i]=='~'||a[i]=='!'||a[i]=='@'||a[i]=='#'||a[i]=='$'||a[i]=='%'||a[i]=='^') { d=1; } } if(strlen(a)>=8&&strlen(a)<=16&&(e+b+c+d)>=3) { printf("YES "); } else printf("NO "); } return 0; }
詹鸿培 2021-04-18 21:00:29 |
这是我的非常简单
#include<stdio.h> #include<string.h> #include<ctype.h> int main(){ int M,p; scanf("%d",&M); getchar(); for(p=0;p<M;p++){ int big=0,small=0,num=0,other=0; char a[50]; int l,i,n; gets(a); l=strlen(a); for(i=0;i<l;i++){ if(a[i]>='A' && a[i]<='Z'){ big=1; } else if(a[i]>='a' && a[i]<='z'){ small=1; } else if(a[i]>='0' && a[i]<='9'){ num=1; } else{ other=1; } } n=big+small+num+other; if(n>=3 && l>=8 && l<=16){ printf("YES\n"); } if(n<3 || l<8 || l>16){ printf("NO\n"); } } return 0; } 不知道纳出了问题 总提示错误一半
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:438 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:742 |
简单的a+b (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:936 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:868 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:840 |
简单的a+b (C语言代码)浏览:523 |
校门外的树 (C语言代码)浏览:692 |
蚂蚁感冒 (C语言代码)浏览:1319 |
1012题解浏览:859 |