题解:P12278 [蓝桥杯 2024 国 Python A] 设置密码
五年级蒟蒻题解,大佬见谅。
和下面的一样,磕了一个多小时。
这题没什么难度,就是判断太多了!
本人写的有点长。
直接看题
注意本题一次读入一整行哦,别问我怎么知道的 QWQ。
大写字母判断:
if(s[i]>='A'&&s[i]<='Z'){
ans+=(cnt[1]==0);
cnt[1]++;
}
小写字母判断:
if(s[i]>='a'&&s[i]<='z'){
ans+=(cnt[2]==0);
cnt[2]++;
}
数字判断:
if(s[i]>='0'&&s[i]<='9'){
ans+=(cnt[2]==0);
cnt[2]++;
}
特殊字符判断:
if(s[i]==126||s[i]==33||s[i]==64||s[i]==35||s[i]==36||s[i]==37||s[i]==94||s[i]==38||s[i]==42||s[i]==40||s[i]==41||s[i]==95){
ll z=1;
ans+=(cnt[4]==0);
for(ll j=0;j<i;j++){
if(s[i]==s[j]){
z=0;
}
}
cnt[4]+=z;
}
强密码判断:
if(s.size()>=12&&(ans==4||ans>=3&&cnt[4]>=3)){
cout<<3<<endl;
}
中密码判断:
if(s.size()>=8&&ans>=2){
cout<<2<<endl;
}
弱密码判断:
if(s.size()>=6){
cout<<1<<endl;
}
三者都不是的密码判断:
else{
cout<<0<<endl;
}
合起来
#include<bits/stdc++.h>//万能头
using namespace std;
using ll=long long;
ll t;//判断的密码的个数
string s;//判断的密码
ll cnt[5],ans;//cnt:大写字母、小写字母、数字、特殊字符的数量 ans:大写字母、小写字母、数字、特殊字符,或包含包括特殊字符在内的其中的种数
bool b;
int main(){
//ios::sync_with_stdio(false);不能用速读
//cin.tie(0),cout.tie(0);
cin>>t;
getline(cin,s);
while(t--){
b=false;//全体归零
s="";
for(ll i=1;i<=4;i++){
cnt[i]=0;
}
ans=0;
getline(cin,s);
for(ll i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z'){//大写字母判断
ans+=(cnt[1]==0);
cnt[1]++;
}
else{//小写字母判断
if(s[i]>='a'&&s[i]<='z'){
ans+=(cnt[2]==0);
cnt[2]++;
}
else{//数字判断
if(s[i]>='0'&&s[i]<='9'){
ans+=(cnt[3]==0);
cnt[3]++;
}
else{//特殊字符判断
if(s[i]==126||s[i]==33||s[i]==64||s[i]==35||s[i]==36||s[i]==37||s[i]==94||s[i]==38||s[i]==42||s[i]==40||s[i]==41||s[i]==95){
ll z=1;
ans+=(cnt[4]==0);
for(ll j=0;j<i;j++){
if(s[i]==s[j]){
z=0;
}
}
cnt[4]+=z;
}
else{//不是包含大小写字母、数字和特殊字符
b=true;
}
}
}
}
}
if(b){//不仅包含大小写字母、数字和特殊字符
cout<<0<<endl;
}
else{
if(s.size()>=12&&(ans==4||ans>=3&&cnt[4]>=3)){//强密码判断
cout<<3<<endl;
}
else{
if(s.size()>=8&&ans>=2){//中密码判断
cout<<2<<endl;
}
else{
if(s.size()>=6){//弱密码判断
cout<<1<<endl;
}
else{
cout<<0<<endl;//三者都不是的密码判断
}
}
}
}
}
return 0;//完美收尾
}