首页 > 编程语言 >第十五届蓝桥杯大赛青少组——赛前解析(算法)

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

时间:2024-08-08 09:24:30浏览次数:12  
标签:十六进制 arr 八进制 青少 二进制 蓝桥 排序 十进制 第十五届

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

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 -= amount
              return balance
      
      balance = 1000
      amount = 150
      print(atm_withdrawal(balance, amount))  # 输出: 850
      

3.枚举算法:

  • 定义:通过枚举所有可能的情况来寻找问题的解。
  • 示例:找出100以内的所有素数。
    • 逐一检查1到100中的每一个数,判断它是否为素数。
    • def is_prime(n):
          if n <= 1:
              return False
          for i in range(2, int(n**0.5) + 1):
              if n % i == 0:
                  return False
          return True
      
      primes = [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 arr
      
      arr = [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 - 1
              while j >= 0 and key < arr[j]:
                  arr[j + 1] = arr[j]
                  j -= 1
              arr[j + 1] = key
          return arr
      
      arr = [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 = i
              for j in range(i+1, len(arr)):
                  if arr[j] < arr[min_idx]:
                      min_idx = j
              arr[i], arr[min_idx] = arr[min_idx], arr[i]
          return arr
      
      arr = [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_sequence
      
      print(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 1
          else:
              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 = 0
          for coin in coins:
              while amount >= coin:
                  amount -= coin
                  count += 1
          return count
      
      coins = [1, 2, 5]
      amount = 11
      print(min_coins(coins, amount))  # 输出: 3
      

标签:十六进制,arr,八进制,青少,二进制,蓝桥,排序,十进制,第十五届
From: https://blog.csdn.net/weixin_51623910/article/details/140985841

相关文章

  • 青少年编程与数学 01-008 在网页上完成计算 01课题、数学课程的性质
    青少年编程与数学01-008在网页上完成计算01课题、数学课程的性质课题要求一、课程性质二、数学的本质三、数学的社会功能四、数学教育的重要性五、数学教育的目标六、数学教育的特性七、连贯性和实践性连贯性(Coherence)实践性(Practicality)八、个性化进度与节奏九、数......
  • 蓝桥杯2024年第十五届省赛A组-训练士兵
    题目描述在蓝桥王国中,有n名士兵,这些士兵需要接受一系列特殊的训练,以提升他们的战斗技能。对于第i名士兵来说,进行一次训练所需的成本为pi枚金币,而要想成为顶尖战士,他至少需要进行ci次训练。为了确保训练的高效性,王国推出了一种组团训练的方案。该方案包含每位士兵所需......
  • 蓝桥杯2024年第十五届省赛A组-团建
    题目描述小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为n和m的树,树上的每个结点上有一个正整数权值。两个人需要从各自树的根结点1出发走向某个叶结点,从根到这个叶结点的路径上经过的所有结点上的权值构成了一个正整数序列,两人的序列的最长......
  • 蓝桥Python组标准库collections(1)
    collections一、Counter:计数器可以直接对列表统计每个元素的出现次数可以统计字符串每个字符的出现次数fromcollectionsimportCounter#计数器a=['arr','arr','brr','crr','arr']b=Counter(a)print(b)print(type(b))print(b['arr']......
  • 蓝桥Python组标准库collections(2)
    collections三、defaultdict:有默认值的字典在字典中获取一个key有两种方法第一种get第二种通过[]获取.使用dict时,如果引用的key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。fromcollectionsimportdefaultdictd=default......
  • 24蓝桥杯-网络安全组
    packet直接搜索flag追踪HTTP的流量解码:ZmxhZ3s3ZDZmMTdhNC0yYjBhLTQ2N2QtOGE0Mi02Njc1MDM2OGMyNDl9Cg==flag{7d6f17a4-2b0a-467d-8a42-66750368c249}爬虫协议题目提示输入robots.txt那就添加喽找到目录点开就是flagflag{a4ee1ccd-5a2f-471f-a9a1-f4c9057d8fcc}CC......
  • 打卡信奥刷题(417)用Scratch图形化工具信奥P10416[普及组/提高] [蓝桥杯 2023 国 A] XYZ
    [蓝桥杯2023国A]XYZ题目描述给定一个区间[L,R][L,R]......
  • 蓝桥杯单片机学习(Day14 实现操作外部开启中断)
    外部中断相关寄存器的配置方法和触发方式:        实验配置:    [email protected],J3跳线配置为IO方式,J5配置为BTN、J2配置为1-3和2-4。配置方法:        EX0、IT0负责外部中断0服务函数的开启其中断服务函数优先级为interrupt0,EX1、IT1负责......
  • 蓝桥杯单片机学习(Day13 矩阵键盘 )
    现象:            按键S7、S11、S15、S19数码管显示00-03      按键S6、S10、S14、S18数码管显示04-07      按键S5、S9、S13、S17数码管显示08-11      按键S4、S8、S12、S16数码管显示12-15矩阵键盘介绍:    注......
  • 蓝桥杯 算法季度赛2
    T2第一发没判最后一组后没有间隔T3WA了两发,调不出来往后看T5是线段树板子,1A了T4贺了个zfunction板子,WA了两发,调不出来剩下的题都没来得及看丑陋sol3.兽之泪II讨论选不选\(x_n\)比较好些如果讨论的是\(y_n\),在选\(y_i\)的情况下可能会选一些\(>y_i\)......