【GESP】C++ 三级真题解析,[2025年12月,第十二次认证]第一题密码强度
GESP C++ 2025年12月,三级真题第一题,考察字符串考点,相对比较简单。题目难度⭐★☆☆☆。
第一题,密码强度
题目要求
题目描述
题目分析
1. 核心逻辑
本题属于字符串基础题目,核心是判断给定的字符串是否同时满足以下三个安全条件:
- 长度要求:字符串长度必须大于等于 8。
- 字符类型要求:
- 必须包含至少一个大写字母(
'A'-'Z')。 - 必须包含至少一个数字(
'0'-'9')。
- 必须包含至少一个大写字母(
只有这三个条件同时满足,才输出 Y,否则输出 N。
2. 解题思路
对于每一组输入的字符串 $s$,我们可以按照以下步骤进行处理:
- 长度预检:首先检查字符串长度
s.length()。如果长度小于 8,直接不符合要求,输出N并处理下一组数据。这样可以减少不必要的遍历,提高效率。 - 状态标记:定义两个布尔变量(例如
has_upper和has_digit),初始值设为false,分别用于记录是否检测到了大写字母和数字。 - 遍历检查:遍历字符串的每一个字符:
- 这是一个大写字母吗?如果是,将
has_upper标记为true。 - 这是一个数字吗?如果是,将
has_digit标记为true。
- 这是一个大写字母吗?如果是,将
- 最终判断:遍历结束后,如果
has_upper和has_digit均为true,说明满足所有条件(长度已在第一步检查过),输出Y;否则输出N。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
/**
* GESP 2025年12月 三级编程题 T1: 密码强度
*
* 题目核心:
* 判断一个密码字符串是否同时满足以下三个条件:
* 1. 长度至少包含 8 个字符。
* 2. 至少包含一个大写字母 (A-Z)。
* 3. 至少包含一个数字 (0-9)。
*
* 如果都满足输出 'Y',否则输出 'N'。
*/
int main() {
int t;
std::cin >> t; // 读取测试数据组数
while (t--) {
std::string s;
std::cin >> s; // 读取密码字符串
// 条件 1: 长度检查
if (s.length() < 8) {
std::cout << "N" << std::endl;
continue; // 如果长度不够,直接输出 N 并处理下一组
}
bool has_upper = false; // 是否有大写字母
bool has_digit = false; // 是否有数字
// 遍历字符串检查字符类型
for (int i = 0; i < s.length(); i++) {
if (s[i] >= 'A' && s[i] <= 'Z') {
has_upper = true;
} else if (s[i] >= '0' && s[i] <= '9') {
has_digit = true;
}
}
// 条件 2 & 3: 必须同时包含大写字母和数字
if (has_upper && has_digit) {
std::cout << "Y" << std::endl;
} else {
std::cout << "N" << std::endl;
}
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权

