第十五届蓝桥杯大赛青少组——赛前解析(算法)
算法:进制转换、模拟算法,枚举算法,冒泡排序,插入排序,选择排序,递推算法,递归算法,贪心算法。
1.进制转换
二进制:只包含0和1
八进制:只包含0-7
十进制:只包含0-9
十六进制:只包含0-9和 ‘A’-‘F’
十进制转二进制、八进制、十六进制
十进制数 a=5
二进制 b=bin(a);八进制 c=oct(a);十六进制 d=hex(a)
二进制转十进制、八进制、十六进制
二进制数 a=‘101010’
十进制 b=int(a,2);八进制 c=oct(b);十六进制 d=hex(b)
八进制转十进制、二进制、十六进制
八进制数 a='52'
十进制 b=int(a,8);二进制 c=bin(b);十六进制 d=hex(b)
十六进制转十进制、二进制、八进制
十六进制数 a='2a'
十进制 b=int(a,16);二进制 c=bin(b);十六进制 d=oct(b)
总结
由上所知,当二进制,八进制,十六进制之间转换时,是以十进制作为媒介。
十进制数=int(某一进制数,其位数)
二进制=bin(十进制数)数学上采用‘整数部分除2,得余数,商为0结束,将余数从下往上取;小数部分乘2,取整,直到达到精度要求结束,按照顺序取’。
八进制=hex(十进制数)数学上采用‘整数部分除8,得余数,直到无法整除结束,将余数从下往上取;小数部分乘8,取整,直到达到精度要求结束,按照顺序取’。
十六进制=oct(十进制数)数学上采用‘整数部分除16,得余数,直到无法整除结束,将余数从下往上取;小数部分乘16,取整,直到达到精度要求结束,按照顺序取’。
其他数学上的转换见:进制之间的数学转换
将二进制数 1011 转换为十进制数:
1011(二进制) = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11(十进制)
值得注意的是以上转换会出现前缀,如果不需要前缀就要用到切片([2:])将前缀删除。
同时,除了十进制数为数字类型,其他都属于字符串类型,在定义时需要加引号。
2.模拟算法
- 定义:通过模拟真实问题的操作步骤,逐步解决问题。
- 示例:模拟一个简单的ATM取款机的操作流程。
- 输入:取款金额,用户账户余额
- 输出:取款后账户余额
-
def atm_withdrawal(balance, amount):if amount > balance:return "Insufficient balance"else:balance -= amountreturn balancebalance = 1000 amount = 150 print(atm_withdrawal(balance, amount)) # 输出: 850
3.枚举算法:
- 定义:通过枚举所有可能的情况来寻找问题的解。
- 示例:找出100以内的所有素数。
- 逐一检查1到100中的每一个数,判断它是否为素数。
-
def is_prime(n):if n <= 1:return Falsefor i in range(2, int(n**0.5) + 1):if n % i == 0:return Falsereturn Trueprimes = [x for x in range(2, 101) if is_prime(x)] print(primes) # 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
4.冒泡排序:
- 定义:一种简单的排序算法,通过重复地遍历待排序列,一次比较两个元素,如果它们的顺序错误就交换它们的位置。
- 示例:对数组[5, 2, 9, 1, 5, 6]进行排序。
- 经过多次比较和交换,最终数组变为[1, 2, 5, 5, 6, 9]。
-
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arrarr = [5, 2, 9, 1, 5, 6] print(bubble_sort(arr)) # 输出: [1, 2, 5, 5, 6, 9]
5.插入排序:
- 定义:一种简单的排序算法,构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 示例:对数组[5, 2, 9, 1, 5, 6]进行排序。
- 逐步将元素插入到已排序部分,最终数组变为[1, 2, 5, 5, 6, 9]。
-
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = keyreturn arrarr = [5, 2, 9, 1, 5, 6] print(insertion_sort(arr)) # 输出: [1, 2, 5, 5, 6, 9]
6.选择排序:
- 定义:每一轮从未排序数据中选出最小值,将其与未排序部分的第一个元素交换,直到所有元素排序完毕。
- 示例:对数组[5, 2, 9, 1, 5, 6]进行排序。
- 逐步选择最小元素并交换,最终数组变为[1, 2, 5, 5, 6, 9]。
-
def selection_sort(arr):for i in range(len(arr)):min_idx = ifor j in range(i+1, len(arr)):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arrarr = [5, 2, 9, 1, 5, 6] print(selection_sort(arr)) # 输出: [1, 2, 5, 5, 6, 9]
排序一般出现在选择题,主要用到的就是内置函数sort()和sorted(),是将数据从小到大排序 。
7.递推算法:
- 定义:通过递推关系逐步求解问题。
- 示例:斐波那契数列(Fibonacci sequence)的递推。
- F(n) = F(n-1) + F(n-2),其中F(1) = 1, F(2) = 1。
-
def fibonacci(n):if n <= 0:return []elif n == 1:return [0]elif n == 2:return [0, 1]fib_sequence = [0, 1]for i in range(2, n):fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])return fib_sequenceprint(fibonacci(10)) # 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
8.递归算法:
- 定义:函数直接或间接调用自身,以分解问题为子问题的方式解决问题。
- 示例:求解阶乘n!。
- n! = n × (n-1)!,其中0! = 1。
-
def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)print(factorial(5)) # 输出: 120
9.贪心算法:
- 定义:每一步都做出在当前看来最优的选择,从而希望得到全局最优解。
- 示例:找零问题,给定面值为1、2、5元的硬币,找出组成金额最少的硬币数量。
- 对于金额11,最优解为5+5+1,共使用3枚硬币。
-
def min_coins(coins, amount):coins.sort(reverse=True)count = 0for coin in coins:while amount >= coin:amount -= coincount += 1return countcoins = [1, 2, 5] amount = 11 print(min_coins(coins, amount)) # 输出: 3
相关文章:
第十五届蓝桥杯大赛青少组——赛前解析(算法)
算法:进制转换、模拟算法,枚举算法,冒泡排序,插入排序,选择排序,递推算法,递归算法,贪心算法。 1.进制转换 二进制:只包含0和1 八进制:只包含0-7 十进制&…...
工作助手C#研究笔记(5)
通过示例对C#程序的结构逻辑进行研究梳理,虽然通过阅读相关书籍,但是来的效果更慢。一下相关内容可能有误,请谨慎听取。 TaskToDoList-master 1.XAML “XAML”是WPF中专门用于设计UI的语言,优点是 1.XAML可以设计出专业的UI和…...
【kali靶机之serial】--反序列化漏洞实操
kali靶机配置 【我图片里没有截图的默认配置即可】需要改的地方图片里面都有。 使用kali扫描网关的主机。 扫到一个开放了80端口HTTP协议的主机ip 访问80端口 会看到一个文本页面,翻译一下看是什么意思。。 F12查看cookie,是一个base64编码了的东西 使…...
学习大数据DAY34 面向对象思想深化练习 将从豆瓣爬取的数据置入自己搭建的网站上
目录 查看电影类型的电影列表 添加电影 修改电影 上机练习 13 使用三层架构完善 web 系统 查看电影类型的电影列表 DAL.py 文件 class MovieDAL(DBHelper): def getMovieByTid(self,typeid): sqlf"""select id,title,release_date,score,tname from Mo…...
【开端】通过Java 过滤器灵活配置URL访问权限,并返回403
一、绪论 在JAVA项目系统中,后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞,在系统不关闭的情况下,如何控制系统的访问权限。 二、控制接口访…...
【C++综合项目】——基于Boost库的搜索引擎(手把手讲解,小白一看就会!!)
目录 一、前言 二、项目的相关背景 ⚡什么是Boost库?⚡ ⚡什么是搜索引擎?⚡ ⚡为什么要做Boost搜索引擎?⚡ 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 &#x…...
强化阶段《660》和《880》哪本优先级高?
现在8月份了,正是考研数学复习的关键时刻,大家应该正在痛快的刷题! 如果你正在做660880,那么这篇笔记值得花五分钟看完,一定会让你刷660和880的质量和速度提高一个层次! 首先我们要知道660和880都怎么用&…...
Redis远程字典服务器(2) —— 全局命令
一,使用官方文档 学会使用文档,是一个优秀程序员的必备技能。Redis的命令非常多(上百个),因为Redis是通过键值对存储数据的,key为string类型,但是value可以是其它的数据类型(字符串…...
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
技术背景 我们知道,Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块,早期,如果需要实现截图功能,又不想依赖Android系统接口,最好的办法是,在底层实现快照截图。 快照截图ÿ…...
tomcat文件上传漏洞练习
1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉,连接上面的网址...
项目实战_图书管理系统(简易版)
你能学到什么 一个简单的项目——图书管理系统(浏览器:谷歌)基础版我们只做两个功能(因为其它的功能涉及的会比较多,索性就放在升级版里了,基础版先入个门) 登录: ⽤⼾输⼊账号,密码完成登录功…...
Gazebo之MyRobot建立
Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…...
WPF学习(5)- Border控件(边框布局)+GridSplitter分割窗口
严格来说,Border并不是一个布局控件,因为它并不是Panel的子类,而是Decorator装饰器的子类,而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…...
ADAS芯片及方案
一 ADAS芯片及方案 1.1 高通SA8775P Snapdragon Ride Flex(SA8775P)舱驾融合平台可通过单颗SoC同时支持数字座舱和智能驾驶功能,在CPU、GPU、NPU的处理能力方面具备强大的性能表现与领先优势,支持实现复杂的智能座舱功能&#x…...
5 mysql 查询语句
1.DML:对数据进行增删改查 提示:Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言,对数据进行 增删改查操作,因为査询的操作太频繁和复杂,将…...
从网络上下载并展示图像数据
一、代码 from PIL import Image import requests from io import BytesIO import matplotlib.pyplot as pltimage_url "https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg" response requests.get(image_url) # response.content 获取 HTTP 响…...
Machine-Learning 机器学习
目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的,以及它如何影响其他机器学习算法? 在机器学习中,哪些特定的数据预处理技术最有效,特别是在处理大规模数据集时? 强化学习在…...
CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析
第 1 题 在 C 中,下面哪个关键字用于声明一个变量, 其值不能被修改?(B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为(D) A. 222222…...
解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量
IPython 的 %%script 魔法命令是一种强大的工具,它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法,并通过代码示例展示其强大功能。 一…...
如何避免项目发布后用户从浏览器WebPack中看到源码
打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
