洛谷B3843 [GESP202306 三级] 密码合规 题解

原题传送门

前言

咳咳,由于本人最近在备考GESP三级,所以可能会有很多水的题解。(见谅……见谅……)
由于今天刚刚重新刷了一遍此题,所以记忆犹新。(太菜了!一个测试点都能 WA )

题目解析

简单的四点!

  1. 这题是要让我们判断密码是否合法。
  2. 判断条件1:只能由 \(\texttt {a ∼ z}\) 之间 26 个小写字母、 \(\texttt {A ∼ Z}\) 之间 26 个大写字母、\(0 ∼ 9\) 之间 \(10\) 个数字以及 ! @ # $ 四个特殊字符构成。
  3. 判断条件2:密码最短长度 : \(6\) 个字符,密码最大长度 : \(12\) 个字符。
  4. 判断条件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;
}
完结撒花!(快去做题,害隔着抄答案呢!)
posted @ 2025-02-18 23:17  Zpy_101001  阅读(515)  评论(0)    收藏  举报