蓝桥杯Learning

news/2024/12/22 11:18:52/

Part 1 递归和递推

1. 简单斐波那契数列

n = int(input())st = [0]*(47) # 注意这个地方,需要将数组空间设置的大一些,否则会数组越界
st[1] = 0
st[2] = 1
# 这个方法相当于是递推,即先求解一个大问题的若干个小问题
def dfs(u):if u ==1:print(st[1],end=" ")if u ==2:print(str(st[1])+" "+str(st[2]),end=" ") # 注意在这个地方,在acwing当中需要进行强制类型转换if u>2 :for i in range (3,u+1):st[i] =st[i-1]+st[i-2]for i in range (1,u+1):print(st[i],end=" ")return
dfs(n)# 方法2 采用递归的方法,递归可以看做将一个大问题分解为若干个小问题,进行求解
def fibonacci(n):if n == 1:return 0elif n == 2:return 1else:fib_list = [0, 1] # 注意这个地方,python列表的下标从0开始for i in range(2, n):fib_list.append(fib_list[i-1] + fib_list[i-2])return fib_list[-1]n = int(input())
# 输出斐波那契数列的前 n 个数字
for i in range(1,n+1):print(fibonacci(i), end=' ')

2. 递归实现指数型枚举

# 指数枚举相当于每一个位置的数字可以选择或者不选
n = int(input())st = [0] * (n+1) #python当中的下标是从0开始的。该数组用于保存每个位置数字的选择情况。0表示无判断,2表示不选,1表示选def dfs(u):if u > n:for i in range(1, n + 1):if st[i] == 1:print(i, end=' ')print()return #注意,这里需要一个returnst[u] = 2dfs(u + 1)      # 第一个分支:不选st[u] = 0       # 恢复现场st[u] = 1dfs(u + 1)      # 第二个分支:选st[u] = 0dfs(1)

3. 递归实现排列型枚举

# 顺序1 依次枚举每个数放到哪个位置
# 顺序2 依次枚举每个位置放哪个数# 相当于是在求解一个全排列问题
# 排列问题当中需要一个判断是否重复的数组# 方法1:
n = int(input())
st = [0]*(n+1) # 表示当前的状态,0表示还没放数,1-n表示放了哪一个数
used =[False]*(n+1) # 表示某个数是否被用过, true表示已经用过def dfs(u):if u>n: #边界for i in range (1,n+1):print(st[i],end=' ') #打印每一个方案print()return #注意这个return的位置# 依次枚举每个分支,即当前位置可以填哪些数for i in range (1,n+1):if used[i] ==False:st[u] =iused[i] =Truedfs(u+1) # 注意每次递归运行到这里的时候现场还没有恢复#恢复现场st[u] =0used[i] = Falsedfs(1)

4.递归实现组合型枚举

n,m = map(int,input().split())
st = [0]*30def dfs(u,s): # u表示从第几个位置开始枚举,第二个位置表示当前从哪一个数开始if u ==m+1: #边界,表示已经选了m个数for i in range (1,m+1):print(st[i],end=' ')print()returnfor i in range(s,n+1):st[u] =idfs(u+1,i+1) # 注意这个地方,u相当于是指示当前是枚举第几个位置,i相当数是指示当前位置开始可以选择的最小的数st[u] =0 # 恢复现场dfs(1,1)

方法2:

n,m = map(int,input().split())
st = [0]*30def dfs(u,s): # u表示从第几个位置开始枚举,第二个位置表示当前从哪一个数开始if u+n-s < m: # 剪枝,相当于想后面所有数都选上都不够m个,则无解returnif u ==m+1: #边界,表示已经选了m个数for i in range (1,m+1):print(st[i],end=' ')print()returnfor i in range(s,n+1):st[u] =idfs(u+1,i+1) # 注意这个地方,u相当于是指示当前是枚举第几个位置,i相当数是指示当前位置开始可以选择的最小的数st[u] =0 # 恢复现场dfs(1,1)

5. 带分数问题

n = int(input())
st = [False] * 10
backup = [False] * 10ans = 0def check(a, c):b = n * c - a * cif not a or not b or not c:  # a,b,c 都不可以等于0return Falsebackup =st[:] # python当中的切片操作while b: # 此处需要注意将一个数各个位上的数字取出来的方法x = b % 10  # 取个位 先去取个位上的数字b //= 10  # 个位删掉if not x or backup[x]: # 需要去判断x是否为0,以及这个数是否被用过return Falsebackup[x] = Truefor i in range(1, 10): # 这个 for循环相当于去判断1-9是否都已经使用过if not backup[i]:return Falsereturn Truedef dfs_c(u, a, c):global ansif u == n:returnif check(a, c) == True:ans += 1for i in range(1, 10):  # 这部分相当于是去选cif st[i] == False:st[i] = Truedfs_c(u + 1, a, c * 10 + i) # 注意这里再一个数字后加上一位的方法st[i] = Falsedef dfs_a(u, a):  # u相当于是当前用了几个数字,a相当于当前位置a放置的数if (a >= n):  # 当a>n的时候,这种情况直接舍去returndfs_c(u, a, 0)  # 相当于在a的递归搜索数的叶子节点,再依次遍历 cfor i in range(1, 10):  # 这部分相当于去选a,即全排列位置a上的数字if st[i] == False:st[i] = Truedfs_a(u + 1, a * 10 + i)st[i] = Falsedfs_a(0, 0)
print(ans)


http://www.ppmy.cn/news/1365036.html

相关文章

未来新质生产力Agent的起源与应用

Agent是什么&#xff1f; AI Agent的发展经历了从哲学思想启蒙到计算机科学助力、专家系统兴起、机器学习崛起、深度学习突破等多个阶段。如今&#xff0c;AI Agent已经成为人工智能领域的重要组成部分&#xff0c;为人类带来了巨大的便利和发展机遇。早在古希腊时期&#xff0…

第十一天-Excel的操作

目录 1.xlrd-Excel的读模块 安装 使用 获取工作簿 读取工作簿的内容 xlsxwriter-Excel的写模块 安装 使用 生成图表 add_series参数 图表的样式 demo&#xff1a;生成图表 Excel的操作在python中有多个模块&#xff0c;为了能够快速使用&#xff0c;选择了相对简单…

【MySQL】_联合查询基础表

联合查询也称为多表查询&#xff0c;是将多个表联合到一起进行查询&#xff1b; 笛卡尔积是联合查询的基础&#xff0c;笛卡尔积其实就是一种排列组合&#xff0c;把两张表的记录尽可能地排列组合出n种情况&#xff1a; 以两张表&#xff1a;班级表与学生表为例&#xff0c;计…

SpringBoot快速入门(黑马学习笔记)

需求 需求&#xff1a;基于SpringBoot的方式开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 开发步骤 第一步&#xff1a;创建SpringBoot工程项目 第二步&#xff1a;定义HelloController类&#xff0c;添加方…

ChatGPT能替代什么人?

上一讲关于ChatGPT的热炒&#xff0c;其实对于我们来说算是敲了敲警钟。 其实在今天&#xff0c;关于ChatGPT&#xff0c;最多人关注的一个问题就是&#xff1a;ChatGPT能取代人吗&#xff0c;或者说能抢人的饭碗么吗&#xff1f; 有人说不能&#xff0c;也有人说能&#xff…

如何选择科技公司或者技术团队来开发软件项目呢

最近有客户问我们为什么同样软件项目不同公司报价和工期差异很大&#xff0c;我们给他解释好久才讲清楚&#xff0c;今天整理一下打算写一篇文章来总结一下&#xff0c;有需要开发朋友可以参考&#xff0c;我们下次遇到客户也可以直接转发文章给客户自己看。 我们根据我们自己报…

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的考务报名平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的考务报名平台&#xff0c;采用M&#xff08;model&#xff0…

Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…