《B4449 [GESP202512 三级] 密码强度》
题目背景
对应的选择、判断题:https://ti.luogu.com.cn/problemset/1199
题目描述
小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:
- 密码至少包含 8 个字符(太短的密码容易被猜出来哦!)。
- 密码至少包含一个大写字母(A、B、C、...、Z 都可以)。
- 密码至少包含一个数字(0、1、2、3、...、9 都可以)。
例如:
- 密码
PAs1s2an是安全密码(有 8 位、包含大写字母P、A和数字1、2)。 - 密码
ab1da3cd不是安全密码(没有大写字母)。 - 密码
Paabdbcd不是安全密码(没有数字)。 - 密码
Pa2不是安全密码(只有 3 位,太短了)。
输入格式
第一行一个正整数 T,代表需要安全检测的密码组数。
对于每组密码,一行包含一个字符串,代表需要安全检测的密码。
输出格式
对于每组密码,输出一行,如果满足强度要求输出 Y,否则输出 N。
输入输出样例
输入 #1复制
6 PAs1s2an 1a2bCql3 Pa12bsna ab1da3cd Paabdbcd Pa2
输出 #1复制
Y Y Y N N N
说明/提示
样例解释
- 密码
PAs1s2an是安全密码(有 8 位、包含大写字母P、A和数字1、2)。 - 密码
1a2bCq13是安全密码(有 8 位、包含大写字母C和数字1、2、3)。 - 密码
Pa12bsna是安全密码(有 8 位、包含大写字母P和数字1、2)。 - 密码
ab1da5cd不是安全密码(没有大写字母)。 - 密码
Paabdbcd不是安全密码(没有数字)。 - 密码
Pa2不是安全密码(只有 3 位,太短了)。
数据范围
对于所有测试点,保证 1≤T≤100,并且每组密码长度不超过 100 且至少为 1,每组密码仅由大小写字母和数字组成。
代码实现:
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { int T; cin >> T; while (T--) { string s; cin >> s; bool len_ok = s.size() >= 8; bool upper = false, digit = false; for (char c : s) { if (isupper(c)) upper = true; if (isdigit(c)) digit = true; } if (len_ok && upper && digit) cout << "Y\n"; else cout << "N\n"; } return 0; }