算法
New_Teen
一个普通的在读大学生,平平无奇的外貌下有着不平凡的心,一颗恒心,千里之行,始于足下,欢迎大家一起学习交流,加油
展开
-
蓝桥杯Python全真题解:10道经典题目深度剖析(2025竞赛必备)
本文精选蓝桥杯Python竞赛10道高频题,从基础到进阶一网打尽:时间转换、A+B优化、成绩统计陷阱、递归字符串等必考题型。揭秘隐藏技巧:用异或3行代码找缺失数、贪心策略避开回文交换坑、预存结果秒答数学题。同时还有复杂度对比表和易错点清单,帮你绕过大部分考生踩过的雷。文末附有刷题速成计划+资源推荐,助你从入门到冲奖,刷题效率翻倍!原创 2025-03-01 15:45:40 · 1327 阅读 · 0 评论 -
最长公共子序列(LCS)——python回溯
输入:第一行:字符串w1第二行:字符串w2w1和w2长度小于等于1000输出:输出最长的子序列和它的长度w1 = "" # 矩阵行,有len(w1)行w2 = "" # 矩阵列,有len(w2)列a = [] # 存放一种子序列(w1,w2相同字符在w2中的索引)A = [] # 存放所有的子序列best_a = [] # 存放最长的子序列best_len_a = 0 # 最长子序列的长度# 冲突检测def conflict(k): global w1, w原创 2022-04-06 22:52:18 · 1313 阅读 · 0 评论 -
八皇后——经典回溯(python)
八皇后问题(Eight queens),是由国际象棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题描述:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用的图论方法解出92种结果。如果经过±90度、±180度旋转,和对角线对称变换的摆法看成一类,共有42类。实现代码(忽略旋转&对称):import原创 2022-04-03 15:29:03 · 1867 阅读 · 0 评论 -
爬楼梯——回溯(python)
1.回溯简介回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。用回溯算法解决问题的一般步骤:1、 针对所给问题,定义问题的解空间,它至少包原创 2022-04-01 16:23:35 · 455 阅读 · 0 评论 -
快速排序——C++
1.提出问题快速排序某个列表中的元素,按照从小到大的顺序进行排列。2.算法分析基于分治算法策略,设定一个基准线(pivot),将数据与基准线对比,分成大于和小于部分,把小于基准数的元素放到左边,把大于基准数的元素放到右边,通过递归操作,不断通过分治算法实现排序,不断拆分,直到将序列拆到只剩一个或者零个元素的时候排列结束。3.实现代码#include <iostream>template <typename T>void quick_sort(T* s, in原创 2022-03-30 21:50:17 · 965 阅读 · 0 评论 -
蓝桥(python)——蛇形填数+时间显示
"""蛇形填数矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?提示:当到达边界时,判断它应该向右走还是向下走,向右走完就直接向左下走,向下走完就直接向右上走"""list_s = [[] for i in range(250)]i, j = 0, 0cnt = 2list_s[0].append(1)while cnt < 1000: j += 1 while i != -1 and j != -1: list原创 2022-03-24 21:39:16 · 286 阅读 · 0 评论 -
最短路径——蓝桥杯
1.问题描述【问题描述】小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。小蓝的图由2021个结点组成,依次编号1至2021对于两个不同的结点a,b,如果a和b的差的绝对值大于21,则两个结点之间没有边相连;如果a和b的差的绝对值小于等于21,则两个点之间有一条长度为a和b的最小公倍数的无向边相连。例如:结点1和结点23之间没有边相连;结点3和结点24之间有一条无向边,长度为24;结点15和结点25之间有一条无向边,长度为75.请计算,结点1和结点2021原创 2022-03-23 21:51:53 · 344 阅读 · 0 评论 -
砝码称重——蓝桥杯(python)
1.题目描述你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边。输入描述:输入的第一行包含一个整数 N。第二行包含 N 个整数:W1, W2, W3, · · · , WN。输出描述:输出一个整数代表答案。样例:(输入)31 4 6样例:(输出)102.代码实现n = int(input())a = list(map(int, input().原创 2022-03-22 22:57:12 · 1380 阅读 · 1 评论 -
折半插入排序——插入算法(python)
1.算法介绍折半插入排序(Binary Insertion Sort)是对直接插入排序算法的一种改进。 折半插入排序与直接插入排序算法原理相同。 只是,在向已排序的数据中插入数据时,采用来折半查找(二分查找)。 先取已经排序的序列的中间元素,与待插入的数据进行比较,如果中间元素的值大于待插入的数据,那么待插入的数据属于数组的前半部分,否则属于后半部分。与直接插入算法相比,虽然折半插入改善了算法中比较次数的数量级大的问题,但是,仍旧没有改变移动元素的时间耗费,所以折半插入算法的时间复杂...原创 2022-03-21 22:38:24 · 1465 阅读 · 1 评论 -
直接插入排序——排序算法(python)
1.直接插入算法直接插入排序是把新的数据插入已经排序好的数列中,排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。直接插入算法不能任意使用,它比较适合待排序记录数目较少且基本有序的情形,如果数目过大,直接插入排序算法会大大降低性能。这是一种比较稳定的排序算法,时间复杂度为O(n²)。2.实现代码def InsertSort(mylist): lengt...原创 2022-03-21 22:25:29 · 2027 阅读 · 0 评论 -
找零问题——贪心
找零问题——贪心算法简介,计算机浮点数运算产生的问题以及解决办法原创 2022-03-19 21:00:48 · 4618 阅读 · 0 评论 -
归并排序——分治(python实现)
1.算法思想归并排序(Merge sort)与快速排序算法十分类似,也是将待排序数据分成两个部分,然后将两个子部分进行递归的归并排序;最后将已经有序的两个子部分进行合并,最终完成排序。2.算法分析归并排序的基本思路是先找到一个数组的中间下标mid,然后以这个mid为中心,对两边分别进行排序,之后我们再根据两边已经排好序的子数组,重新进行值大小分配。(1)利用分治算法思想将待排序的序列递归分成细度为1的子序列。(2)此时子序列只有一个元素,无需排序,两两进行简单归并。(3)归并到上一层原创 2022-03-18 21:57:19 · 1728 阅读 · 0 评论 -
快速排序——分治(python实现)
1.提出问题快速排序某个列表中的元素,按照从小到大的顺序进行排列。2.算法分析基于分治算法策略,设定一个基准线(pivot),将数据与基准线对比,分成大于和小于部分,把小于基准数的元素放到左边,把大于基准数的元素放到右边,通过递归操作,不断通过分治算法实现排序,不断拆分,直到将序列拆到只剩一个或者零个元素的时候排列结束。3.实现代码def quick_sort(n): if len(n) < 2: return n ...原创 2022-03-18 18:08:25 · 2840 阅读 · 0 评论 -
汉诺塔——python递归
一、什么是汉诺塔?汉诺塔问题是法国数学家编写的一个印度古老传说,简单来说就是:寺院里有三根柱子,第一根摞着64个盘子,从上到下盘子越来越大。方丈要求小和尚把64个盘子全部移动到第三根柱子上,在移动的时候,始终只能是小盘子压着大盘子,且每次只能移动一个。假如移动一个盘子要一秒钟,按照数学规律,要花5849亿年之久,比地球的寿命都长n倍。二、提出问题假设现在有三根柱子(A,B,C),A柱上有N个盘子,要求按照汉诺塔原则将A柱上的盘子借助B柱,全部移动到C柱上,请设计程序模拟移动过程,...原创 2022-03-18 00:50:10 · 10847 阅读 · 13 评论 -
纸牌三角形——蓝桥基础(python)
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。下面就是一种排法 A 9 64 83 7 5 2这样的排法可能会有很多。如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?提示:考虑到旋转,每个数字可以随机出现在三角形的一角,结果除以3,考虑到镜像,结果要除以2。import itertoolsres = 0b = [i for i in range(1, 10)]for a in list(itertool...原创 2022-03-16 21:44:26 · 809 阅读 · 0 评论 -
四平方和——蓝桥基础(python)
四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^ 2 + 0^ 2 + 1^ 2 + 2^27 = 1^ 2 + 1^ 2 + 1^ 2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个原创 2022-03-16 21:33:56 · 373 阅读 · 0 评论 -
排他平方数——蓝桥基础(python)
排它平方数203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!再归纳一下筛选要求:1.6位正整数2.每个数位上的数字不同3.其平方数的每个数位不含原数字的任何组成数位for i in range(123456, 987654 + 1): f_1 = False f_2 = False i原创 2022-03-16 21:19:47 · 522 阅读 · 0 评论 -
第几天——蓝桥基础(python实现)
第几天y年m月d日是y年的第几天。比如y年的1月1日是那一年的第一天,那么2000年7月7日是那一年的第几天。输入格式年份 月份 日输出格式天数(与当年的第一天相比)import datetimey, m, d = map(int, input().split())a = datetime.date(y, 1, 1)b = datetime.date(y, m, d)print(b.__sub__(a).days + 1)输出结果:2000 7 7189总结:运用原创 2022-03-16 21:10:16 · 187 阅读 · 0 评论 -
大数乘法——蓝桥基础题(python)
大数乘法对于32位字长的机器,大约超过20亿,用int类型就无法表示了,我们可以选择int64类型,但无论怎样扩展,固定的整数类型总是有表达的极限!def bigmul(x, y, list_y): base = 10000 x2 = x // base x1 = x % base y2 = y // base y1 = y % base n1 = x1 * y1 n2 = x1 * y2 n3 = x2 * y1 n4原创 2022-03-16 21:03:21 · 489 阅读 · 0 评论 -
算法基础——蓝桥杯(python实现,实际上大多数用c++更明白易懂)(第一部分,共12个小题)
1.成绩统计问题描述:编写一个程序,建立一个字典,每个字典包含姓名、学号、英语成绩、数学成绩和C++成绩,并通过字典操作平均分最高的学生和平均分最低的学生并且输出。输入格式:输入n+1行,第一行输入一个正整数n,表示学生数量;接下来的n行每行输入5个数据,分别表示姓名、学号、英语成绩、数学成绩和C++成绩。注意成绩有可能会有小数。输出格式:输出两行,第一行输出平均成绩最高的学生姓名。第二行输出平均成绩最低的学生姓名。样例输入2yx1 1 45 67 87yx2 2 88 90 99样例输出:y原创 2022-03-16 02:06:51 · 4198 阅读 · 1 评论
分享