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 1001≤T≤100,并且每组密码长度不超过 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::前缀usingnamespace std;intmain(){int n;// 存储测试用例的组数 string s;// 存储每一个需要检测的密码字符串 cin >> n;// 读取测试用例组数// 循环n次,处理每一个密码用例(n--先执行循环再自减,等价于for循环遍历所有用例)while(n--){ cin >> s;// 读取当前需要检测的密码// 第一步:快速判断密码长度是否小于8,若不足直接判定为不安全if(s.size()<8){ cout <<"N"<< endl;// 输出不安全标记Ncontinue;// 跳过后续判断,直接处理下一个密码,提升效率}bool d =0;// 标记是否存在大写字母,0代表不存在,1代表存在bool shu =0;// 标记是否存在数字,0代表不存在,1代表存在// 遍历密码的每一个字符,逐一判断并更新标记// int(s.size())将无符号的字符串长度转为有符号整数,避免下标越界警告for(int i =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)下,运行效率极高,能快速完成所有测试用例的判断。

Read more

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

基于腾讯云HAI + DeepSeek快速设计自己的个人网页

前言:通过结合腾讯云HAI 强大的云端运算能力与DeepSeek先进的 AI技术,本文介绍高效、便捷且低成本的设计一个自己的个人网页。你将了解到如何轻松绕过常见的技术阻碍,在腾讯云HAI平台上快速部署DeepSeek模型,仅需简单几步,就能获取一个包含个人简介、技能特长、项目经历及联系方式等核心板块的响应式网页。 目录 一、DeepSeek模型部署在腾讯云HAI 二、设计个人网页 一、DeepSeek模型部署在腾讯云HAI 把 DeepSeek 模型部署于腾讯云 HAI,用户便能避开官网访问限制,直接依托腾讯云 HAI 的超强算力运行 DeepSeek-R1 等模型。这一举措不仅降低了技术门槛,还缩短了部署时间,削减了成本。尤为关键的是,凭借 HAI 平台灵活且可扩展的特性,用户能够依据自身特定需求定制专属解决方案,进而更出色地适配特定业务场景,满足各类技术要求 。 点击访问腾讯云HAI控制台地址: 算力管理 - 高性能应用服务 - 控制台 腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力,只需简单的几步就能调用DeepSeek - R1

By Ne0inhk
AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-ZEEKLOG博客 目录 引言 一、什么是DeepSeek? 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型训练与优化 4. 自动化推理与部署 5. 行业专用解决方案 三、蓝耘通义万相2.1与DeepSeek的对比分析 3.1 核心区别 3.2 结合使用的优势 四、蓝耘注册流程 五、DeepSeek与蓝耘通义万相2.1的集成应用 5.1 集成应用场景 1. 智能医疗诊断

By Ne0inhk
如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

如何通过 3 个简单步骤在 Windows 上本地运行 DeepSeek

它是免费的——社区驱动的人工智能💪。         当 OpenAI 第一次推出定制 GPT 时,我就明白会有越来越多的人为人工智能做出贡献,并且迟早它会完全由社区驱动。         但从来没有想过它会如此接近😂让我们看看如何在 Windows 机器上完全免费使用第一个开源推理模型!  步骤 0:安装 Docker 桌面         我确信很多人已经安装了它,所以可以跳过,但如果没有 — — 这很简单,只需访问Docker 的官方网站,下载并运行安装 👍         如果您需要一些特定的设置,例如使用 WSL,那么有很多指导视频,请查看!我将继续下一步。 步骤 1:安装 CUDA 以获得 GPU 支持         如果您想使用 Nvidia 显卡运行 LLM,则必须安装 CUDA 驱动程序。(嗯……是的,它们需要大量的计算能力)         打开CUDA 下载页面,

By Ne0inhk
在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

在 VSCode 中本地运行 DeepSeek,打造强大的私人 AI

本文将分步向您展示如何在本地安装和运行 DeepSeek、使用 CodeGPT 对其进行配置以及开始利用 AI 来增强您的软件开发工作流程,所有这些都无需依赖基于云的服务。  步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT         要在本地运行 DeepSeek,我们首先需要安装Ollama,它允许我们在我们的机器上运行 LLM,以及CodeGPT,它是集成这些模型以提供编码辅助的 VSCode 扩展。 安装 Ollama Ollama 是一个轻量级平台,可以轻松运行本地 LLM。 下载Ollama 访问官方网站:https://ollama.com * 下载适合您的操作系统(Windows、macOS 或 Linux)的安装程序。 * 验证安装 安装后,打开终端并运行: ollama --version  如果 Ollama 安装正确,

By Ne0inhk