第十五届蓝桥杯大赛软件赛国赛Python 大学 C 组试做【本期题单: 设置密码、栈】

news2025/5/31 21:40:09

早上好啊大伙,这一期依旧是蓝桥杯备赛刷题的记录。
本期题单:设置密码、栈

在这里插入图片描述

前言

前段时间准备省赛,运气好进国赛了。所以就开始准备6月份的国赛。但是近期还有别的比赛要准备,所以刷题的速度比较慢,可能每一期就会有一两道题目。

如果大伙再刷哪道题的时候遇到问题了,也可以留言或者私信,小白兔会去先尝试一下那到题目。

文章目录

    • 前言
  • 设置密码
    • 题目
    • 思路分析
    • 代码
    • 题目
    • 思路分析
    • 代码
  • 感谢大伙观看,别忘了三连支持一下
  • 大家也可以关注一下我的其它专栏,同样精彩喔~
  • 下期见咯~

设置密码

题目

题目链接:设置密码

在这里插入图片描述
在这里插入图片描述

思路分析

这道题需要去判断的有四点:

  1. 是否只包含 字母、数字、指定的特殊字符
  2. 字符串长度
  3. 大写字母、小写字母、数字、特殊字符所包含类别数目
  4. 特殊字符种类数

对于第一点,比较麻烦的就是特殊字符,可以将特殊字符用列表存起来,然后用 in 来判断。

第二点就直接用 len() 就行了。

第三点 和 第四点可以用哈希,然后最后用 count 来数。

代码

x = [126, 33, 64, 35, 36, 37, 94, 38, 42, 40, 41, 95]  # 定义允许的特殊字符的ASCII码列表(包括!@#$%^&*()_等)

def isture(s):  # 定义函数:检查字符串是否只包含允许的字符
    for i in s:  # 遍历字符串中的每个字符
        if not (ord(i) in x or i.isdigit() or i.isalpha()):  # 检查字符是否满足条件:
            # ord(i)获取字符ASCII码,判断是否在x列表中(特殊字符),或是否为数字/字母
            return False  # 若不满足条件,返回False
    return True  # 所有字符均满足条件,返回True

def count(s):  # 定义函数:统计字符串的字符类型数量和特殊字符种类
    cnt1 = [0, 0, 0, 0]  # 初始化cnt1列表,用于记录是否包含大写字母、小写字母、数字、其他字符(存在则记为1)
    cnt2 = [0 for _ in range(130)]  # 初始化cnt2列表,索引为ASCII码,记录每种特殊字符的出现次数(非0表示存在)
    for i in s:  # 遍历字符串中的每个字符
        if i.isupper():  # 判断是否为大写字母
            cnt1[0] = 1  # 标记存在大写字母
        elif i.islower():  # 判断是否为小写字母
            cnt1[1] = 1  # 标记存在小写字母
        elif i.isdigit():  # 判断是否为数字
            cnt1[2] = 1  # 标记存在数字
        else:  # 其他字符(特殊字符)
            cnt1[3] = 1  # 标记存在特殊字符
            cnt2[ord(i)] = 1  # 在cnt2中标记该特殊字符的ASCII码位置为1(存在)
    return (cnt1.count(1), cnt2.count(1))  # 返回两个统计值:
    # cnt1.count(1):字符类型数量(大写/小写/数字/特殊中存在的类型数)
    # cnt2.count(1):不同特殊字符的种类数(ASCII码在0-129范围内的特殊字符数量)

n = int(input())  # 读取输入的测试用例数量
for _ in range(n):  # 遍历每个测试用例
    s = input()  # 读取输入的字符串
    if isture(s):  # 检查字符串是否为合法字符(仅包含字母、数字、指定特殊字符)
        c1, c2 = count(s)  # 调用count函数获取字符类型数和特殊字符种类数
        Len = len(s)  # 获取字符串长度
        # 以下为密码强度判断逻辑
        if Len >= 12 and (c1 >= 3 and c2 >= 3 or c1 >= 4):  # 强度等级3条件:
            # 长度≥12,且(字符类型≥3且特殊字符种类≥3,或字符类型≥4)
            print(3)  # 输出强度等级3
        elif Len >= 8 and c1 >= 2:  # 强度等级2条件:长度≥8且字符类型≥2
            print(2)  # 输出强度等级2
        elif Len >= 6:  # 强度等级1条件:长度≥6(隐含字符类型可能不足2,但至少满足长度)
            print(1)  # 输出强度等级1
        else:  # 长度<6
            print(0)  # 输出强度等级0
    else:  # 字符串包含不允许的字符
        print(0)  # 输出强度等级0

题目

题目链接:栈
在这里插入图片描述

思路分析

直接按照题目的意思来写,就是下面这个步骤 ——

  1. 判断这个数在不在列表里,在的话,删除原本的数
  2. 计算相邻两个数和是否为奇数

按照原本的意思,每次变化都需要重新计算奇数数量。但是显然这样会超时。

那么我们就需要优化一下,首先能否不去重新计算奇数?

当这个数不在列表中的时候,我们直接判断最后两个数的情况,进行修改即可。
如果它在列表中的时候,我们就需要找到原本它所在的位置,然后处理它的邻里关系。例如说:

1, 2,3,4,5中我们需要修删掉2。
那么我们要判断 1和2 ,2和3,这是原本这个位置的奇数关系,如果是奇数就需要把他们减掉,例如说现在就需要 - 2。然后去掉2之后,1和3也需要判断,例如说现在就不用变。

再然后,我们还需要判断存在的数的位置是不是开头或者结尾。

下面看代码

import os
import sys

# 请在此输入您的代码
n = int(input())
cnt = 0
lst = [int(input())]
print(0)
for i in range(1, n):
    x = int(input())
    if x in lst:
        p = lst.index(x)
        if p > 0 and (lst[p-1] + x) % 2 == 1:
            cnt -= 1
        if p < len(lst) - 1 and (lst[p+1] + x) % 2 == 1:
            cnt -= 1
        if p > 0 and p < len(lst) - 1 and (lst[p-1] + lst[p+1]) % 2 == 1:
            cnt += 1
        lst.remove(x)
    lst.append(x)
    if (lst[-2] + x) % 2 == 1:
        cnt += 1
    print(cnt)

但是,这个代码只能过70%,有6条还是会超时。

那么再修改一下思路,我们再看看第一条中能不能优化。

判断是否存在新输入的数,以及寻找这个数的位置。

题目并不怎么强调整条列表的每个数的位置,更注重一个数及其两边的数的关系。
那么我们就可以用哈希的方式来寻找,大家可否想到字典这个哈希结构。

我们将这个数作为key,然后两侧的值作为value

删除数据时,可以直接找到这个数及其两侧的值,然后仿照上面的写法就行。

然后这个写法给大伙提醒一些需要注意的点:

  1. 记得将 0 也进行定义。
  2. 对于新输入的数要用 [a, 0]来定义。
  3. 对于上一个数就是重复数,要特别注意

OK,根据上面的提示和思路,整体和链表比较像只是用字典来实现了,大伙可以试试,然后再看下面的代码

代码

import os
import sys

n = int(input())  # 读取插入操作的次数
cnt = 0  # 初始化奇数对计数
l_x = int(input())  # 读取第一个节点的值
dic = {0:[0,0], l_x:[0,0]}  # 初始化字典,0作为哨兵节点,l_x作为第一个节点
print(0)  # 第一个节点插入后,没有相邻节点,输出0

for i in range(1, n):
    x = int(input())  # 读取新插入的节点值
    
    # 处理节点已存在的情况(删除操作)
    if x in dic.keys():
        l, r = dic[x][0], dic[x][1]  # 获取当前节点的前驱和后继
        if l != 0 and (x + l) % 2 == 1:  # 如果前驱存在且和为奇数,减少计数
            cnt -= 1
        if r != 0 and (x + r) % 2 == 1:  # 如果后继存在且和为奇数,减少计数
            cnt -= 1
        if l != 0 and r != 0 and (l + r) % 2 == 1:  # 如果前驱和后继存在且和为奇数,增加计数
            cnt += 1
        dic[r][0], dic[l][1] = l, r  # 更新前驱和后继的指针,跳过当前节点
        if r == 0:  # 如果当前节点是链表尾部,更新l_x为前驱
            l_x = l
    
    # 插入新节点到链表尾部
    dic[x] = [l_x, 0]  # 新节点的前驱为l_x,后继为0
    dic[l_x][1] = x  # 更新l_x的后继为新节点
    if (x + l_x) % 2 == 1:  # 如果新节点与前驱的和为奇数,增加计数
        cnt += 1
    l_x = x  # 更新l_x为新节点,使其成为新的链表尾部
    print(cnt)  # 输出当前奇数对的数量

感谢大伙观看,别忘了三连支持一下

大家也可以关注一下我的其它专栏,同样精彩喔~

下期见咯~

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2391915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报错SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json

报错信息 SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json 解决方案一 更新所有依赖 npm update解决方案二&#xff08;不一定成功&#xff09; src\lib\hooks.server.ts&#xff0c;每次请求服务器时执行 import type { Handle } from &…

word添加页眉

问题一&#xff1a; 为word文档添加页眉。 方法&#xff1a; 1、在要添加页眉的第一页页面顶端双击页眉区域&#xff0c;如果添加页眉页上面还有其他页或者与上一页添加页眉内容不同&#xff0c;记得取消“链接到前一节”&#xff08;点击使其上面没有灰色即可&#xff09;&…

2025推客系统小程序开发:独立部署源码交付,高性价比裂变增长引擎

在私域流量争夺白热化的今天&#xff0c;源码独立部署的推客系统小程序已成为企业构建自主分销体系、降低获客成本的核心利器。基于成熟案例与技术沉淀&#xff0c;我们提供安全可控、高性价比的一站式解决方案&#xff0c;助力企业快速搭建专属推客生态&#xff0c;实现长效增…

CentOS 7.0重置root密码

文章目录 版本&#xff1a;CentOS 7.0内核版本&#xff1a;CentOS Linux, with Linux 3.10.0-123.el7.x86_64 服务器重启后&#xff0c;等待进入上述页面&#xff0c;按⬆⬇键&#xff0c;中断正常启动。在此页面按E&#xff0c;进入编辑模式 继续按⬇&#xff0c;找到linux16…

YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互

1.1网络结构 1.2 添加过程 1.2.1 核心代码 import torch import torch.nn as nn import torch.nn.functional as F from einops import rearrangedef patch_divide(x, step, ps):"""Crop image into patches.Args:x (Tensor): Input feature map of shape(b, …

DAY33 简单神经网络

你需要自行了解下MLP的概念。 你需要知道 梯度下降的思想激活函数的作用损失函数的作用优化器神经网络的概念 神经网络由于内部比较灵活&#xff0c;所以封装的比较浅&#xff0c;可以对模型做非常多的改进&#xff0c;而不像机器学习三行代码固定。 1. 神经网络的概念 (Th…

OBOO鸥柏丨2025年鸿蒙生态+国产操作系统触摸屏查询一体机核心股

在信创产业蓬勃发展的当下&#xff0c;OBOO鸥柏积极响应纯国产化号召&#xff0c;推出基于华为鸿蒙HarmonyOS操作系统的触摸屏查询一体机及室内外场景广告液晶显示屏一体机上市&#xff0c;OBOO鸥柏品牌旗下显示产品均采用国产芯片&#xff0c;接入终端控制端需支持安卓Windows…

【观成科技】Ymir勒索软件组织窃密木马RustyStealer加密通信分析

1.概述 Ymir勒索软件首次发现于2024年7月&#xff0c;采用ChaCha20加密算法对受害者文件进行加密&#xff0c;加密文件后缀为.6C5oy2dVr6。在攻击过程中&#xff0c;Ymir勒索组织利用名为RustyStealer的窃密木马获取受害企业的账号凭证&#xff0c;为后续横向移动和权限提升奠…

Vuer开源程序 是一个轻量级的可视化工具包,用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR,可以在移动设备上运行。

​一、软件介绍 文末提供程序和源码下载 Vuer开源程序 是一个轻量级的可视化工具包&#xff0c;用于与动态 3D 和机器人数据进行交互。它支持 VR 和 AR&#xff0c;可以在移动设备上运行。 二、Our features include: 我们的功能包括&#xff1a; light-weight and performa…

短视频一键搬运 v1.7.1|短视频无水印下载 一键去重

短视频一键搬运是一款全自动智能处理软件&#xff0c;专为短视频创作者设计。它自带去水印、改MD5码、视频去重、视频编辑等功能&#xff0c;能够高效处理大量视频&#xff0c;解放双手并降低成本。该软件支持从多个短视频平台无缝提取视频并去除水印&#xff0c;同时检测敏感词…

海上石油钻井平台人员安全管控解决方案

一、行业挑战与需求分析 海上钻井平台面临复杂环境风险&#xff08;如易燃易爆、金属干扰、极端气象&#xff09;和人员管理难题&#xff08;如定位模糊、应急响应延迟&#xff09;。传统RFID或蓝牙定位技术存在精度不足&#xff08;1-5米&#xff09;、抗干扰能力差等问题&am…

TEASER-plusplu Windows Mingw编译

编译记录&#xff1a; 1.下载该库 v2.0 链接1&#xff1a;https://github.com/MIT-SPARK/TEASER-plusplus 连接2&#xff1a;https://github.com/MIT-SPARK/TEASER-plusplus/releases 2.下载 googletest 链接&#xff1a;https://github.com/google/googletest/releases?page2…

tryhackme——Data Exfiltration

文章目录 一、网络拓扑二、数据泄露分类2.1 传统数据泄露2.2 C2通信2.3 隧道 三、隧道3.1 Exfiltration using TCP socket3.2 Exfiltration using SSH3.3 Exfiltrate using HTTP(S)HTTP隧道 3.4 Exfiltration using ICMP3.4.1 ICMP数据包结构3.4.2 MSF实现ICMP数据泄露3.4.3 IC…

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF

阿里云服务器安装Linux宝塔面板用于部署网站&#xff0c;又安装了雷池WAF用于防护网站&#xff0c;网站访问正常。可以参考文章&#xff1a;Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF 本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encry…

【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动

文章目录 前言一、HUAWEI MateBook Fold 非凡大师&#xff08;一&#xff09;非凡设计&#xff08;二&#xff09;非凡显示&#xff08;三&#xff09;非凡科技&#xff08;四&#xff09;非凡系统&#xff08;五&#xff09;非凡体验 二、HUAWEI MateBook Pro三、预热&#xf…

SpringBoot Controller接收参数方式, @RequestMapping

一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解&#xff0c;将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同&#xff0c;直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…

端午节互动网站

端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站&#xff0c;旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块&#xff1a;端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站&#xff1a;https://duanwujiekuaile…

react-color-palette源码解析

项目中用到了react-color-palette组件&#xff0c;以前对第三方组件都是不求甚解&#xff0c;这次想了解一下其实现细节。 简介 react-color-palette 是一个用于创建颜色调色板的 React 组件。它提供了一个简单易用的接口&#xff0c;让开发者可以轻松地创建和管理颜色调色板。…

在 Ubuntu 上安装 NVM (Node Version Manager) 的步骤

NVM (Node Version Manager) 是一个用于管理多个 Node.js 版本的工具&#xff0c;它允许您在同一台设备上安装、切换和管理不同版本的 Node.js。以下是在 Ubuntu 上安装 NVM 的详细步骤&#xff1a; 安装前准备 可先在windows上安装ubuntu 参考链接&#xff1a;https://blog.…

重温经典算法——插入排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法&#xff0c;其核心思想是将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&…