当前位置: 首页 > news >正文

第十五届蓝桥杯大赛青少组——赛前解析(算法)

算法:进制转换、模拟算法,枚举算法,冒泡排序,插入排序,选择排序,递推算法,递归算法,贪心算法。

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
      

相关文章:

第十五届蓝桥杯大赛青少组——赛前解析(算法)

算法&#xff1a;进制转换、模拟算法&#xff0c;枚举算法&#xff0c;冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff0c;递推算法&#xff0c;递归算法&#xff0c;贪心算法。 1.进制转换 二进制&#xff1a;只包含0和1 八进制&#xff1a;只包含0-7 十进制&…...

工作助手C#研究笔记(5)

通过示例对C#程序的结构逻辑进行研究梳理&#xff0c;虽然通过阅读相关书籍&#xff0c;但是来的效果更慢。一下相关内容可能有误&#xff0c;请谨慎听取。 TaskToDoList-master 1.XAML “XAML”是WPF中专门用于设计UI的语言&#xff0c;优点是 1.XAML可以设计出专业的UI和…...

【kali靶机之serial】--反序列化漏洞实操

kali靶机配置 【我图片里没有截图的默认配置即可】需要改的地方图片里面都有。 使用kali扫描网关的主机。 扫到一个开放了80端口HTTP协议的主机ip 访问80端口 会看到一个文本页面&#xff0c;翻译一下看是什么意思。。 F12查看cookie&#xff0c;是一个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项目系统中&#xff0c;后端给前端提供接口。但是在某些场景我们需要临时控制接口是否能被访问。或关闭某一接口的访问权限。 比如某一接口被攻击了或者某一接口存在漏洞&#xff0c;在系统不关闭的情况下&#xff0c;如何控制系统的访问权限。 二、控制接口访…...

【C++综合项目】——基于Boost库的搜索引擎(手把手讲解,小白一看就会!!)

目录 一、前言 二、项目的相关背景 ⚡什么是Boost库&#xff1f;⚡ ⚡什么是搜索引擎&#xff1f;⚡ ⚡为什么要做Boost搜索引擎&#xff1f;⚡ 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 &#x…...

强化阶段《660》和《880》哪本优先级高?

现在8月份了&#xff0c;正是考研数学复习的关键时刻&#xff0c;大家应该正在痛快的刷题&#xff01; 如果你正在做660880&#xff0c;那么这篇笔记值得花五分钟看完&#xff0c;一定会让你刷660和880的质量和速度提高一个层次&#xff01; 首先我们要知道660和880都怎么用&…...

Redis远程字典服务器(2) —— 全局命令

一&#xff0c;使用官方文档 学会使用文档&#xff0c;是一个优秀程序员的必备技能。Redis的命令非常多&#xff08;上百个&#xff09;&#xff0c;因为Redis是通过键值对存储数据的&#xff0c;key为string类型&#xff0c;但是value可以是其它的数据类型&#xff08;字符串…...

Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?

技术背景 我们知道&#xff0c;Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块&#xff0c;早期&#xff0c;如果需要实现截图功能&#xff0c;又不想依赖Android系统接口&#xff0c;最好的办法是&#xff0c;在底层实现快照截图。 快照截图&#xff…...

tomcat文件上传漏洞练习

1、靶场账号注册 vulfocus 注册后邮箱中点击激活 2、首页选择并开启靶场 复制映射的ip和端口 在浏览器输入ip和端口 改成put并把1.jsp中内容复制进去 3打开哥斯拉&#xff0c;连接上面的网址...

项目实战_图书管理系统(简易版)

你能学到什么 一个简单的项目——图书管理系统&#xff08;浏览器&#xff1a;谷歌&#xff09;基础版我们只做两个功能&#xff08;因为其它的功能涉及的会比较多&#xff0c;索性就放在升级版里了&#xff0c;基础版先入个门&#xff09; 登录: ⽤⼾输⼊账号,密码完成登录功…...

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分割窗口

严格来说&#xff0c;Border并不是一个布局控件&#xff0c;因为它并不是Panel的子类&#xff0c;而是Decorator装饰器的子类&#xff0c;而Decorator继承于FrameworkElement。我们要先看看它的父类Decorator。 public class Decorator : FrameworkElement, IAddChild {public…...

ADAS芯片及方案

一 ADAS芯片及方案 1.1 高通SA8775P Snapdragon Ride Flex&#xff08;SA8775P&#xff09;舱驾融合平台可通过单颗SoC同时支持数字座舱和智能驾驶功能&#xff0c;在CPU、GPU、NPU的处理能力方面具备强大的性能表现与领先优势&#xff0c;支持实现复杂的智能座舱功能&#x…...

5 mysql 查询语句

1.DML&#xff1a;对数据进行增删改查 提示&#xff1a;Execute执行 Execute and Suppress 执行并且抑制这个警告 person表的结构 /* DML:Data Manipulation Language 数据操作语言&#xff0c;对数据进行 增删改查操作&#xff0c;因为査询的操作太频繁和复杂&#xff0c;将…...

从网络上下载并展示图像数据

一、代码 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 机器学习

目录 基本概念与分类 工作原理 应用领域 发展趋势 机器学习中的深度学习是如何工作的&#xff0c;以及它如何影响其他机器学习算法&#xff1f; 在机器学习中&#xff0c;哪些特定的数据预处理技术最有效&#xff0c;特别是在处理大规模数据集时&#xff1f; 强化学习在…...

CSP 2023 普及组第一轮 - CSP/S 2023初试题 基础部分解析

第 1 题 在 C 中&#xff0c;下面哪个关键字用于声明一个变量&#xff0c; 其值不能被修改?&#xff08;B) A. unsigned B. const C. static D. mutable 【const声明的变量不可修改】 第 2 题 八进制数 12345670(8) 和 07654321(8) 的和为&#xff08;D&#xff09; A. 222222…...

解锁IPython的跨平台魔法:深入探索%%script命令的神秘力量

IPython 的 %%script 魔法命令是一种强大的工具&#xff0c;它允许你在 IPython 环境中执行外部脚本。这个特性特别适用于需要在 IPython Notebook 中直接与 Web 技术交互的场景。下面我将为你详细介绍 %%script 命令的使用方法&#xff0c;并通过代码示例展示其强大功能。 一…...

如何避免项目发布后用户从浏览器WebPack中看到源码

打包前在config->index.js中设置productionSourceMap为false productionSourceMap: false,...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* 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…...