洛谷 B4449:[GESP202512 三级] 密码强度 ← 字符串

​【题目来源】
https://www.luogu.com.cn/problem/B4449
https://oj.czos.cn/p/6032

【题目描述】
小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:
• 密码至少包含 8 个字符(太短的密码容易被猜出来哦!)。
• 密码至少包含一个大写字母(A、B、C、...、Z 都可以)。
• 密码至少包含一个数字(0、1、2、3、...、9 都可以)。
例如:
• 密码 PAs1s2an 是安全密码(有 8 位、包含大写字母 P、A 和数字 1、2)。
• 密码 ab1da3cd 不是安全密码(没有大写字母)。
• 密码 Paabdbcd 不是安全密码(没有数字)。
• 密码 Pa2 不是安全密码(只有 3 位,太短了)。

【输入格式】
第一行一个正整数 T,代表需要安全检测的密码组数。
对于每组密码,一行包含一个字符串,代表需要安全检测的密码。

【输出格式】
对于每组密码,输出一行,如果满足强度要求输出 Y,否则输出 N。

【输入样例】
6
PAs1s2an
1a2bCql3
Pa12bsna
ab1da3cd
Paabdbcd
Pa2

【输出样例】
Y
Y
Y
N
N
N

【数据范围】
对于所有测试点,保证 1≤T≤100,并且每组密码长度不超过 100 且至少为 1,每组密码仅由大小写字母和数字组成。

【算法分析】
● 判断不同类型的字符 → 用 if + if + if,只选其中一个情况 → 才用 if…else if…else。现在的题目是分类统计,必须用若干个独立的 if。

【算法代码】

#include<bits/stdc++.h>
using namespace std;
 
bool check(string s) {
    int a=0,b=0;
    for(int i=0; i<s.size(); i++) {
        if(s[i]>='A'&&s[i]<='Z') a=1;
        if(s[i]>='0'&&s[i]<='9') b=1;
    }
    if(s.size()<8) return false;
    if(a+b<2) return false;
    return true;
}
 
int main() {
    string s,t;
    int T;
    cin>>T;
    while(T--) {
        cin>>s;
        if(check(s)) cout<<"Y\n";
        else cout<<"N\n";
    }
 
    return 0;
}
 
/*
in:
6
PAs1s2an
1a2bCql3
Pa12bsna
ab1da3cd
Paabdbcd
Pa2

out:
Y
Y
Y
N
N
N
*/





【参考文献】
https://gesp.ccf.org.cn/101/attach/1723012369874976.pdf
https://blog.csdn.net/hnjzsyjyj/article/details/159002268
https://www.luogu.com.cn/problem/solution/B4449
 

posted @ 2026-05-15 21:05  Triwa  阅读(75)  评论(0)    收藏  举报