洛谷B3843 [GESP202306 三级] 密码合规 题解
前言
咳咳,由于本人最近在备考GESP三级,所以可能会有很多水的题解。(见谅……见谅……)
由于今天刚刚重新刷了一遍此题,所以记忆犹新。(太菜了!一个测试点都能 WA )
题目解析
简单的四点!
- 这题是要让我们判断密码是否合法。
- 判断条件1:只能由 \(\texttt {a ∼ z}\) 之间 26 个小写字母、 \(\texttt {A ∼ Z}\) 之间 26 个大写字母、\(0 ∼ 9\) 之间 \(10\) 个数字以及
! @ # $
四个特殊字符构成。 - 判断条件2:密码最短长度 : \(6\) 个字符,密码最大长度 : \(12\) 个字符。
- 判断条件3:大写字母,小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。
思路解析
这道题只要弄懂了题意,就非常简单,做个模拟,就行了。(你做错的那次纯属眼瞎)
呵呵……
Code
点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
string t;
void chack(string a){
int AB=0,ab=0,ze=0,on=0;
if(a.length()>12||a.length()<6){
return;
}
for(int i=0;i<a.length();i++){
if(!((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]>='0'&&a[i]<='9')||(a[i]=='!')||(a[i]=='@')||(a[i]=='#')||(a[i]=='$'))){
return ;
}
if(a[i]>='a'&&a[i]<='z') ab=1;
if(a[i]>='A'&&a[i]<='Z') AB=1;
if(a[i]>='0'&&a[i]<='9') ze=1;
if((a[i]=='!')||(a[i]=='@')||(a[i]=='#')||(a[i]=='$')) on=1;
}
if(ab+AB+ze>=2 && on==1){
cout<<a<<endl;
}
}
int main(){
cin>>s;
s=s+',';
for(int i=0;i<s.length();i++){
if(s[i]==','){
chack(t);
t="";
}else{
t+=s[i];
}
}
return 0;
}