news 2026/6/10 2:21:20

CCF-GESP计算机学会等级考试2025年12月三级C++T1 密码强度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CCF-GESP计算机学会等级考试2025年12月三级C++T1 密码强度

B4449 [GESP202512 三级] 密码强度

题目描述

小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:

  • 密码至少包含888个字符(太短的密码容易被猜出来哦!)。
  • 密码至少包含一个大写字母(A、B、C、…、Z 都可以)。
  • 密码至少包含一个数字(0、1、2、3、…、9 都可以)。

例如:

  • 密码Paas1s2an是安全密码(有888位、包含大写字母PA和数字12)。
  • 密码ab1da3cd不是安全密码(没有大写字母)。
  • 密码Paabdbcd不是安全密码(没有数字)。
  • 密码Pa2不是安全密码(只有333位,太短了)。

输入格式

第一行一个正整数TTT,代表需要安全检测的密码组数。

对于每组密码,一行包含一个字符串,代表需要安全检测的密码。

输出格式

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

输入输出样例 #1

输入 #1

6 PAs1s2an 1a2bCql3 Pa12bsna ab1da3cd Paabdbcd Pa2

输出 #1

Y Y Y N N N

说明/提示

样例解释

  • 密码PAs1s2an是安全密码(有888位、包含大写字母PA和数字12)。
  • 密码1a2bCq13是安全密码(有888位、包含大写字母C和数字123)。
  • 密码Pa12bsna是安全密码(有888位、包含大写字母P和数字12)。
  • 密码ab1da5cd不是安全密码(没有大写字母)。
  • 密码Paabdbcd不是安全密码(没有数字)。
  • 密码Pa2不是安全密码(只有333位,太短了)。

数据范围

对于所有测试点,保证1≤T≤1001 \leq T \leq 1001T100,并且每组密码长度不超过100100100且至少为111,每组密码仅由大小写字母和数字组成。

题解:密码强度检测器

题目分析

本题要求我们实现一个密码强度检测器,判断每个输入的密码是否满足安全要求。安全密码需要同时满足以下三个必要条件(缺一不可):

  1. 密码长度至少为8个字符;
  2. 密码中至少包含一个大写字母(A-Z);
  3. 密码中至少包含一个数字(0-9)。

若三个条件全部满足,输出Y;只要有一个条件不满足,输出N

解题思路

我的解题思路分为四步,按顺序处理每个测试用例,高效完成判断:

  1. 读取测试用例数:首先读取输入的测试用例组数T,确定需要处理的密码数量;
  2. 快速过滤长度不达标密码:对于每个密码,先判断其长度是否小于8。若长度不足,直接判定为不安全密码,输出N并跳过后续判断,提升程序效率;
  3. 遍历密码标记关键字符:若密码长度达标,遍历密码的每一个字符,分别标记是否存在大写字母和数字(用两个布尔变量记录状态);
  4. 判断并输出结果:根据标记的状态,判断是否同时存在大写字母和数字。若同时存在,输出Y;否则输出N

代码解释

以下是我编写的代码,逐段为大家解释其功能:

// 引入C++标准库所有头文件,无需单独引入iostream、string等,简化代码#include<bits/stdc++.h>// 使用标准命名空间,避免书写std::前缀usingnamespacestd;intmain(){intn;// 存储测试用例的组数string s;// 存储每一个需要检测的密码字符串cin>>n;// 读取测试用例组数// 循环n次,处理每一个密码用例(n--先执行循环再自减,等价于for循环遍历所有用例)while(n--){cin>>s;// 读取当前需要检测的密码// 第一步:快速判断密码长度是否小于8,若不足直接判定为不安全if(s.size()<8){cout<<"N"<<endl;// 输出不安全标记Ncontinue;// 跳过后续判断,直接处理下一个密码,提升效率}boold=0;// 标记是否存在大写字母,0代表不存在,1代表存在boolshu=0;// 标记是否存在数字,0代表不存在,1代表存在// 遍历密码的每一个字符,逐一判断并更新标记// int(s.size())将无符号的字符串长度转为有符号整数,避免下标越界警告for(inti=0;i<int(s.size());i++){// 判断当前字符是否为大写字母(A-Z),若是则将大写字母标记设为1if(s[i]>='A'&&s[i]<='Z'){d=1;}// 判断当前字符是否为数字(0-9),若是则将数字标记设为1if(s[i]>='0'&&s[i]<='9'){shu=1;}}// 第二步:判断是否同时满足(长度达标+有大写字母+有数字)// 此时长度已达标,只需判断两个标记是否均为1if(d==1&&shu==1){cout<<"Y"<<endl;// 三个条件均满足,输出安全标记Y}else{cout<<"N"<<endl;// 缺少大写字母或数字,输出不安全标记N}}return0;// 程序正常结束}

1. 头文件与命名空间

  • #include <bits/stdc++.h>:引入C++标准库的所有头文件,无需单独引入stringiostream等,简化代码编写;
  • using namespace std;:使用标准命名空间,避免每次写std::cinstd::cout等前缀。

2. 变量定义与输入读取

  • int n;:存储测试用例组数T
  • string s;:存储每个需要检测的密码;
  • cin>>n;:读取测试用例组数。

3. 循环处理每个密码

  • while(n--):循环n次,处理每一个密码(n--先执行循环再自减,等价于for(int i=0;i<n;i++));
  • cin>>s;:读取当前需要检测的密码字符串。

4. 长度判断(快速过滤)

  • if (s.size()<8)s.size()返回字符串s的长度(字符个数),若长度小于8,说明不满足安全条件;
  • cout<<"N"<<endl;:输出N
  • continue;:跳过本次循环的后续代码,直接处理下一个密码,提升效率。

5. 标记大写字母与数字

  • bool d=0;:初始化大写字母标记为00代表不存在,1代表存在);
  • bool shu=0;:初始化数字标记为0
  • for(int i=0;i<int(s.size());i++):遍历密码的每一个字符(int(s.size())size()返回的无符号整数转为有符号整数,避免下标越界警告);
  • if (s[i]>='A'&&s[i]<='Z'):判断第i个字符是否为大写字母,若是则将d设为1(一旦找到一个大写字母,标记永久为1,满足“至少一个”的要求);
  • if (s[i]>='0'&&s[i]<='9'):判断第i个字符是否为数字,若是则将shu设为1(逻辑同上)。

6. 最终判断与输出

  • if (d==1&&shu==1):判断是否同时存在大写字母(d=1)和数字(shu=1)(此时密码长度已达标,三个条件全部满足);
  • 满足则输出Y,否则输出N
  • return 0;:程序正常结束。

总结

本代码的核心思路是“先快速过滤无效情况(长度不足),再遍历标记关键字符”,逻辑清晰且高效。时间复杂度为O(T*L)T为测试用例数,L为密码最大长度),在题目数据范围(T≤100L≤100)下,运行效率极高,能快速完成所有测试用例的判断。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:29:27

2026改一个越用越旺的昵称(收藏版)

&#x1f365;兜里藏金ᐝ࿐ 吸钞&#x1f4b8;体质拉满ཀོ࿐暴富锦鲤ꚸ附体Չᐝ࿐ᩚ ༄ᐝ财运爆棚ഒᩚ࿐&#x1f33c;᭄好运ꚸ超载Չᐝ࿐ᩚ ꪋꪆ꫁⁵⁰月薪百万꧔&#x1f380;᭄༣财神敲门&#x1f3e0;ଓꦿ࿐ &#x1f33c;᭄快乐ꚸ溢屏Չᐝ࿐ᩚꪋꪆ᭄好运&#x1f495;扎堆…

作者头像 李华
网站建设 2026/6/9 21:21:32

智慧医院新范式!东软与西安交通大学第一附属医院全面战略合作

近日&#xff0c;东软集团与西安交通大学第一附属医院共同签署战略合作协议。双方将围绕智慧医院、医工结合、医疗健康产业创新等方面&#xff0c;开启多维度、多层次的全面战略合作。这是双方二十余年稳定、互信合作中的又一里程碑式成果&#xff0c;标志着双方实现了从业务领…

作者头像 李华
网站建设 2026/6/9 20:14:20

开源推荐--RustDesk:基于Rust的远程桌面神器,彻底告别TeamViewer/AnyDesk!

摘要&#xff1a;在远程办公和运维日益普及的今天&#xff0c;TeamViewer和AnyDesk的商业检测和连接限制让许多用户感到头疼。本文将深入介绍一款基于Rust编写的开源远程桌面软件——RustDesk。它不仅轻量、安全&#xff0c;更支持自建服务器&#xff0c;让你完全掌控自己的数据…

作者头像 李华
网站建设 2026/6/9 23:55:08

三维EKF实现无人机高精度悬停控制

目录 1. 三维 EKF 设计 状态向量 状态方程&#xff08;预测&#xff09; 2. 观测方程&#xff08;更新&#xff09; GPS 观测矩阵&#xff1a; 光流观测矩阵&#xff1a; 气压计观测矩阵&#xff1a; 3. 代码实现&#xff08;STM32 HAL 库&#xff09; 4. 集成到无人机…

作者头像 李华
网站建设 2026/6/9 21:08:03

虾皮店铺页面如何优化

在Shopee经营店铺时&#xff0c;卖家常常需要依据商品类目与店铺配置来增加产品曝光&#xff0c;这使得优化店铺页面变得十分重要。那么具体可以从哪些方面着手改进呢&#xff1f; 1、店铺头像 头像最好与销售品类相关&#xff0c;并符合当地审美偏好&#xff0c;设计应鲜明、…

作者头像 李华
网站建设 2026/6/9 19:44:35

YOLOv8 Panoptic Segmentation全景分割实现

YOLOv8 全景分割实现&#xff1a;从镜像部署到工业级应用 在自动驾驶、智能监控和机器人视觉等前沿领域&#xff0c;对场景的理解早已不再满足于“图中有几辆车”这样的粗粒度判断。人们需要的是更精细的感知能力——比如&#xff0c;“哪一辆车挡住了行人”&#xff0c;“每个…

作者头像 李华