解题思路:
题目要求:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
这里不需要用到数组,用一个字符变量即可,节省空间提高效率
char ch;
//x 代表包含大写字母 y 代表包含小写字母
//z 代表包含数字 k 代表包含特殊字符
int x = 0, y = 0, z = 0, k = 0;
当当前字符符合那四个条件中的一个,相应的条件变量x,y,z,k就会等于 1,表示包含当输入换行符结束输入,也就是要判断yes或no了
最后判断 x+y+z+k的和是不是大于等于3,即x+y+z+k>=3
只要>=3,就说明是一定满足包含三个或者四个条件的
也还要判断密码位数是否符合条件就可以了
注意事项:
参考代码:
#include<iostream>
using namespace std;
//判断当前字符是不是符合第四个条件,即判断当前字符是不是特殊符号,是就返回1,否则返回0
int f(char a){
if (a == '~' || a == '!' || a == '@' || a == '#' || a == '$' || a == '%' || a == '^'){
return 1;
}
else{
return 0;
}
}
int main(){
int n;//输入多少个字符串的个数
while ((scanf("%d", &n))!= EOF){
getchar();//吃掉输入数字按下回车的字符,否则如输入3,按下回车后,到下面输入ch的时候,ch接收的就是‘\n’了,就相当于 ch='\n';
for (int i = 1; i <= n; i++){
char ch; //用于判断的字符
int sum = 0;//计算字符的个数,输入一个就+1
//x 代表包含大写字母 y 代表包含小写字母
//z 代表包含数字 k 代表包含特殊字符
int x = 0, y = 0, z = 0, k = 0;
//依次输入每一个字符,直至遇到换行符就结束输入
while ((ch = getchar()) != '\n'){
sum++;//每输入一个字符,密码为数就+1
//判断是否包含那四个条件
if ((ch >= 'a'&&ch <= 'z')){
x = 1;
}
else if ((ch >= 'A'&&ch <= 'Z')){
y = 1;
}
else if ((ch >= '0'&&ch <= '9')){
z = 1;
}
else if (f(ch)){
k = 1;
}
}
//最后判断密码位数和是否包含3个或者四个条件
if (sum>=8&&sum<=16&&x + y + z + k >= 3){
cout << "YES\n";
}
else{
cout << "NO\n";
}
}
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复