草庐IT

2021年蓝桥杯赛题【Python】

Lucky小小吴 2023-05-16 原文

【填空】

1、卡片

小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 11 到 1010, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210张,请问小蓝可以从 1 拼到多少?

import os
import sys
n = sys.maxsize
num = 0
for i in range(1,n):
    num += str(i).count('1')
    if num > 2021:
      print(i-1)
      break
#结果:3181

2、空间

请问 256MB 的空间可以存储多少个 32 位二进制整数?

#需要知道32位二进制占内存4B
n = 256*1024*1024
print(int(n/4))

3、路径

问题描述

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。
小蓝的图由 2021 个结点组成,依次编号 1 至 2021。
对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。
例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。

计算要求
请计算,结点 1 和结点 2021 之间的最短路径长度是多少。

思路
1、算法:dp动态规划
2、步骤

  • 构造一个n*n的矩阵
  • 利用两个for循环,遍历1到2021的最短路径,每次遍历数时,对应的数值会变化成最短路径
  • 到最后,索引值为2021,便是最优路径

3、将1到2021路径最短问题->n个类似与1到(2,22)的最短路径的小问题。

import math
#求最大公因数
# def gcd(a,b):
#   if b == 0:
#     return a
#   else:
#     return gcd(b,a%b)
#求最小公倍数
# def gbs(a,b):
#   return a*b // gcd(a,b)
dp = [float('inf')] * (2021+1) #inf正无穷
dp[1] = 0
for i in range(1,2022):
  for j in range(i+2,i+22):
    if j > 2021:
      break
    # dp[j] = min(dp[j] , dp[i]+gbs(i,j))
    dp[j] = min(dp[j] , dp[i]+i*j // math.gcd(i,j))

print(dp[2021])

4、相乘

问题描述

小蓝想知道,能不能在 1 至 1000000007 之间找到一个数,与 2021 相乘后 再除以 1000000007后的余数为 999999999。

结果提交
如果存在,请在答案中提交这个数; 如果不存在,请在答案中提交 0。

分析

  1. 不能直接依据题目那样所讲的遍历1~1000000007,不然会超时
  2. 转换下运算公式

#超时
# for i in range(1,1000000008):
#   n = (i*2021) % 1000000007
#   if n == 999999999:
#     print(i)
#     break

for i in range(1,2022):
  if (i*1000000007+999999999) % 2021 == 0:
    print(int((i*1000000007+999999999) / 2021))
    break 

5、回路计数

6、距离和

问题描述
两个字母之间的距离定义为它们在字母表中位置的距离。例如 AA 和 CC 的距离为 22,LL 和 QQ 的距离为 55。
对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。
例如:ZOO 的内部距离为 2222,其中 ZZ 和 OO 的距离为 1111。

求解
请问,LANQIAO 的内部距离是多少?

lst = 'LANQIAO'
# a = []
count = 0
n = len(lst)

#先转ASCLL码值,再相减,ord()转ascll值,abs()绝对值
for i in range(n):
  for j in range(i+1,n):
    count += abs(ord(lst[i]) - ord(lst[j]))
print(count)

7、序列个数

请问有多少个序列满足下面的条件:
序列的长度为 5。
序列中的每个数都是 1 到 10 之间的整数。
序列中后面的数大于等于前面的数。

num=0
for i in range(10):
  for j in range(i,10):
    for m in range(j,10):
      for n in range(m,10):
        for k in range(n,10):
          num +=1
print(num)

8、数学位数

问题描述

整数 11 到 1212 连在一起,成为 123456789101112,长度为 1515。

求解
请问整数 11 到 20202020 连在一起,长度为多少?

import os
import sys
a = []
for i in range(1,2021):
  a.append(i)
ls = int("".join(map(str,a)))
num = len(str(ls))
print(num)

9、货物摆放

问题描述

import os
import sys

# 请在此输入您的代码
n = 2021041820210418 #货物数量 
count = 0 #统计值赋初始值0 
docker = set() #创建集合属性的容器

for i in range(1,int(n**0.5)+1): #循环遍历,筛选n的约数(对n开根号的写法能加快速度) 
    if n%i == 0: #判断约数 
      docker.add(i) #添加约数 
      docker.add(n//i)

for i in docker: #三重循环遍历容器(三重循环快到运行5秒出结果) 
    for j in docker: 
          for k in docker: 
            if i*j*k == n: 
              count += 1 #满足条件,方案数+1 
print(count) #打印结果

【设计题】

1、杨辉三角

问题描述


参考大佬博客

#阶乘
def C(a,b):
  i,j = a,1
  res = 1
  while j <= b:
    res = res*i/j
    i -= 1
    j += 1
  # print(res)
  return int(res)

#查找
def searve(x,n):
  minl  = 2*x  #下限 
  uppl = n #底数的最大上限C(4,2) and C(6,1)

  while minl <= uppl:
    mid = (uppl + minl) // 2
    if C(mid,x) == n:#取中
      print(int(mid* ( mid+1 ) /2 ) + x + 1)
      return True

    elif C(mid,x) > n: #数值大于所求的数,缩小上限范围
      uppl = mid - 1
    else:
      minl = mid + 1
  return False

n = int(input())

for i in range(16,-1,-1):
  if searve(i,n):#传送数的列位置和需要求的数值
    break

2、最小砝码

参考资料
问题描述

import os
import sys

N = int(input())
i = 1
ans = 1
while i<N:
  i = i*3 +1
  print(i)
  ans += 1
print(ans)

3、左孩子右兄弟

问题描述

考点

  • 树结构
  • 深度搜索DFS,每次探索一个节点到底,回去原点,再去其他的。
  • 递归算法

个人解题思路
看图(比较潦草)

参考博客
左孩子右兄弟含义

import os
import sys

n = int(input())
#在这里,对于所有评测用例: 1000001≤N≤100000会出现递归次数频繁,导致无效返回
#原因:python默认的递归深度是很有限的,大约900多
sys.setrecursionlimit(1000000) 
tree = [[] for _ in range(n+1)]

#构造一个类似于树结构的二维列表
#例如题目中的1 1 1 2
"""
0 【1】
1 【2,3,4】
2 【5】
"""
for i in range(2,n+1):
    m = int(input())
    tree[m].append(i)

#深度搜索操作
def dfs(j):
  if tree[j] == None:
    return 0

  maxs = 0

  for i in tree[j]:
    maxs = max(maxs ,dfs(i)) #递归下一层数值,并返回其长度
  return len(tree[j])+maxs
print(dfs(1))

有关2021年蓝桥杯赛题【Python】的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  3. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  4. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  5. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  6. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  7. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  8. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

  9. python - 是否可以使用 Ruby 或 Python 禁用 anchor /引用来发出有效的 YAML? - 2

    是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案

  10. .net - .NET 将如何影响 Python 和 Ruby 应用程序? - 2

    我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth

随机推荐