林聪木
巧笑倩兮,美目盼兮,素以为绚兮
展开
-
蓝桥杯赛题精讲系列文章目录介绍(持续补充ing)
蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办。截至2022年2月,蓝桥杯全国软件和信息技术专业人才大赛已举办12届。大赛包括个人赛和团队赛两个比赛项目,个人赛设置:1、C/C++程序设计(本科A组、本科B组、高职高专组)2、Java软件开发(本科A组、本科B组、高职高专组)3、嵌入式设计与开发(大学组、研究生组)4、单片机设计与开发(大学组)5、电子设计与开发(大学组)。团队赛设置:软件创业赛一个科目组别。............原创 2022-08-25 10:08:59 · 1931 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-打印方块(附C语言和Java是代码实现)
注意:仅仅填写划线部分缺少的内容,不要添加任何已有内容或说明性文字。以下是小明写的程序,请你分析其流程,填写划线部分缺少的代码。(如果显示有问题,可以参见【图1.jpg】)小明想在控制台上输出 m x n 个方格。原创 2023-03-21 00:15:00 · 165 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-打印大X(附Java、python和C++代码实现)
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0原创 2023-03-20 00:15:00 · 281 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-基数排序(附C++、C语言、R语言、Java、matlab和python代码实现)
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序:根据键值的每位数字来分配桶;桶排序:每个桶存储一定范围的数值;计数排序:每个桶只存储单一键值;原创 2023-02-04 00:15:00 · 295 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-桶排序(附C++、C语言、R语言、Java、matlab和python代码实现)
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。原创 2023-02-04 00:15:00 · 236 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-计数排序(附Java、python、C语言和C++代码实现)
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。原创 2023-02-03 00:15:00 · 616 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-堆排序(附Java、python、C++、C语言和matlab代码)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的平均时间复杂度为 Ο(nlogn)。原创 2023-02-07 00:15:00 · 245 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-快速排序(附Java、python、R语言、C++、C语言和matlab代码)
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。原创 2023-02-06 00:15:00 · 285 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-归并排序(附C++、C语言、Java、matlab和python代码实现)
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);自下而上的迭代;和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。原创 2023-02-05 00:15:00 · 196 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-希尔排序(附Java、python、C语言和C++代码实现)
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。原创 2023-02-04 00:15:00 · 191 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-插入排序(附C++、C语言、R语言、Java、matlab和python代码实现)
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。原创 2023-02-03 00:30:00 · 187 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-选择排序(附C语言、R语言、C++、Java、python和matlab代码实现)
选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小元素的数组下标,当轮循环结束之后,那这个变量存储的就是当前最小元素的下标,此时再执行交换操作即可。原创 2023-02-02 00:15:00 · 349 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-冒泡排序(附C语言、R语言、C++、Java、python和matlab代码实现)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。原创 2023-02-01 10:10:09 · 365 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-基于数组实现线性表
对于线性结构,有两种保存的方法,一种是使用C语言中内置的数组,这样的结构成为顺序表;另一种使用指针,这样的结构成为链表。对于线性结构,有12种基本的操作,分别是:初始化、删除顺序表、清空顺序表、判断是否为空、遍历、求表的长度、求某个元素在表中的位置、返回特定序号的元素、求某个元素的前一个元素、求某个元素的后一个元素、插入一个元素、删除一个元素。原创 2022-11-24 15:56:10 · 421 阅读 · 0 评论 -
蓝桥杯实战应用【赛题代码篇】-兰顿蚂蚁(附Java、Python和C++代码)
兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。蚂蚁的头部朝向为:上下左右其中一方。蚂蚁的移动规则十分简单:若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。原创 2022-10-19 01:30:00 · 217 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-取数位(附Java和C++代码)
求1个整数的第k位数字有很多种方法。以下的方法就是一种。对于题目中的测试数据,应该打印5。请仔细分析源码,并补充划线部分所缺少的代码。注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。原创 2022-10-17 01:30:00 · 159 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-日期问题(附Java、Python和C++代码)
小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。一个日期,格式是"AA/BB/CC"。比如:计算2020年第50天的月和日。原创 2022-10-16 01:00:00 · 360 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-K倍区间(附Python、C++和Java代码)
给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i原创 2022-10-15 01:30:00 · 240 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-第几天(附Java、Python和C++代码)
2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。原创 2022-10-14 01:30:00 · 139 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-明码(附Java、Python和C++代码)
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:第1字节,第2字节第3字节,第4字节....第31字节, 第32字节这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。原创 2022-10-13 01:30:00 · 176 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-测试次数(附Java、Python和C++代码)
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。原创 2022-10-12 02:00:00 · 155 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-递增三元组(附Java、Python和C++代码实现)
我们可以给A,B,C都先排好序,然后固定枚举B的每一个元素,然后用二分法,找出A中小于当前枚举的元素B[i]的数的个数,设有x个,找出C中大于当前枚举的元素B[i]的数的个数,设为y个,那么由乘法原理,对于枚举的B[i]这个来说,就有x∗y个递增三元组,依次类推,知道枚举完B中的元素,累加答案即可。我们用数组ca[]来存储每个a[i]出现的个数,cc[]来存储每个c[i]出现的个数,ca[ i ] : 表示在 A 中 , A[i] 这个值出现多少次。对于30%的数据,1原创 2022-10-11 02:00:00 · 350 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-Excel地址(附Java、Python和C++代码)
首先我们能想到这就像是一个26进制数,AZ代表的是26+26,也就是说当数值是26倍数时,位数较小的保留Z,较大的位数减去一。设置一个空列表用来装得到的字母,建立字典0对应Z,1对应A以此类推到25对应Y,用求余符号把每一位数上的值分别求出来,已经在出现Z的时候进位一定要小心!好像末2位是以1当26,末3位是以1当26*26。本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。Excel单元格的地址表示很有趣,它使用字母来表示列号。当然Excel的最大列号是有限度的,所以转换起来不难。原创 2022-09-27 03:00:00 · 194 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-九宫幻方(附Java、Python和C++代码)
小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。4 9 23 5 78 1 6有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。原创 2022-09-26 03:00:00 · 276 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-拉马车(附Java、C语言和C++代码)
我们只需要模拟游戏过程,每次A,B每个玩家放完牌后,判断排的字符串中是否有重复的,只需判断最后一张是否与之前的有重复的,如果有我们把这部分的字符串截取出来,然后注意要再翻转一下字符串,然后加到当前加牌的玩家的手牌中,直到一个玩家手牌用完并且没能从排的字符串中获取时,结束。当轮到B出牌时,他的牌K与桌上的纸牌序列中的K相同,则把包括K在内的以及两个K之间的纸牌都赢回来,放入自己牌的队尾。B方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5]原创 2022-09-25 02:15:00 · 374 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-图形排版(附Java和C++代码)
小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi。假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版:1. 该工具会按照图片顺序,在宽度 M 以内,将尽可能多的图片排在一行。该行的高度是行内最高的图片的高度。例如在 M=10 的纸张上依次打印 3x4, 2x2, 3x3 三张图片,则效果如下图所示,这一行高度为4。(分割线以上为列标尺,分割线以下为排版区域;数字组成的矩形为第x张图片占用的版面)0123456789----------原创 2022-09-24 03:00:00 · 636 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-猴子分香蕉解(附Java、Python、C语言和C++代码)
每一只猴子分完等的香蕉后藏起自己一份,说明只剩下4份,同时每次分都有剩余,则不能省去剩余量且要控制剩余范围。第2只猴子醒来,重新把香蕉均分成5堆,还剩下2个,就吃掉并把自己的一份藏起来继续睡觉。第3只猴子醒来,重新把香蕉均分成5堆,还剩下3个,就吃掉并把自己的一份藏起来继续睡觉。第4只猴子醒来,重新把香蕉均分成5堆,还剩下4个,就吃掉并把自己的一份藏起来继续睡觉。第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉。第5只猴子醒来,重新把香蕉均分成5堆,哈哈,正好不剩!原创 2022-09-23 03:00:00 · 271 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-哪天返回(附Java、Python、C语言和C++代码)
小明被不明势力劫持。后莫名其妙被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。要求提交的是一个整数,表示第几天。请不要提交任何多余的内容。此类题主要考虑循环变换数据 直到数据符合要求则跳出循环。请计算一下,小明在第几天就能凑够108元,返回地球。原创 2022-09-22 03:00:00 · 177 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-次数差(附Java、Python和C++代码)
国王总是询问:获胜次数最多的和获胜次数最少的有多大差距?(当然,他不关心那些一次也没获胜的,认为他们在怠工罢了)在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。要求输出一个数字,表示出现次数最多的字母比出现次数最少的字母多了多少次。x星球有26只球队,分别用a~z的26个字母代表。他们总是不停地比赛。输入,一个串,表示球队获胜情况(保证串的长度原创 2022-09-17 03:00:00 · 267 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-等腰三角形(附Java、Python和C++代码)
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。字符串与数字的相互转换,先拼接一个字符串,然后逆时针填充为等腰三角形。2. 用这个串填充三角形的三条边。输入,一个正整数n(3原创 2022-09-18 03:00:00 · 181 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-小朋友崇拜圈(附Java、Python和C++代码)
否则从编号为i的小朋友开始,一直找下一个小朋友的崇拜的小朋友并加入到数组T中,直到下一个小朋友已经在T中时停止。(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。然后用数组T的长度减去已经在T中的那个小朋友的下标。首先判断编号为i的小朋友是否已经被访问过,如果已经被访问过,则跳过进行下一轮循环。建立一个大小为n+1的访问数组,用来表示这个小朋友是否已经被访问过。班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。原创 2022-09-19 03:00:00 · 226 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-耐摔指数(附Python、Java和C++代码)
第一次摔x层,如果摔碎了,从第一层开始摔,正好x次。如果第x层没碎,摔x+x-1层,如果碎了,从x+1开始摔,做多也是x次。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。然后我们考虑有两部手机的时候,因为题目说了是运气最差的时候,所以我们首先从哪里开始扔第一个手机也就没什么区别了,我们扔第一部手机有两种情况。a手机从4层扔,坏了,则下面有3层,b,c 两部手机2次足可以测出指数;如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。原创 2022-09-13 02:00:00 · 268 阅读 · 0 评论 -
蓝桥杯实战应用【赛题代码篇】-分巧克力(附Java、C++和Python代码)
儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1. 形状是正方形,边长是整数2. 大小相同例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?输入第一行包含两个整数N和K。原创 2022-09-17 03:15:00 · 252 阅读 · 0 评论 -
蓝桥杯实战应用【赛题代码篇】-9数算式(附Java、Python和C++代码)
③将所得的乘积转换成字符串,判断是否1~9每个字符都出现了:可用flag[9]数组进行标记;②对于乘积结果要做两个判断:a.判断字符串的长度是否为9,b.判断字符串中是否出现0;①将1~9数字存到一个数组中,进行全排序(next_permutation);请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。而乘积恰好也是用到了1~9的所有数字,并且每个1次。①在数组中的元素全排列时,乘号的位置也要进行全排列;原创 2022-09-12 04:30:00 · 160 阅读 · 0 评论 -
蓝桥杯实战应用【赛题代码篇】-魔方状态(附Java、C++和Python代码)
其实就是空间状态搜索。关于操作,二阶魔方只做U(顶层顺时针) R(右层顺时针) F(前层顺时针)就可以得到所有状态了。判重需要旋转整个魔方去比较。如果两个状态经过魔方的整体旋转后,各个面的颜色都一致,则认为是同一状态。请你计算一下,这样的魔方被打乱后,一共有多少种不同的状态。请提交表示状态数的整数,不要填写任何多余内容或说明文字。二阶魔方就是只有2层的魔方,只由8个小块组成。如图p1.png所示。原创 2022-09-15 04:00:00 · 174 阅读 · 0 评论 -
蓝桥杯实战应用【赛题代码篇】-方格分割(附Java、C++和Python代码)
典型的DFS:主要思路是从中间坐标(3,3)开始走,设其当前坐标为(x,y),则其对称的坐标为(6-x,6-y),并用vis记录已走,然后改变四个方向的坐标,对其进行dfs(),如果符合条件则ans加一,最后因为旋转对称是同一种分法,从(3,3)开始有四个方向,所以最后要ans/4。2.只要确定半条线的走向,就能依照关于原点对称的原则就可以找到另外半条线,具体体现在我们的代码中就是在标记了当前走到的点时,也要标记和它关于中心点(3,3)对称的点。6x6的方格,沿着格子的边线剪开成两部分。原创 2022-09-16 03:00:00 · 123 阅读 · 0 评论 -
蓝桥杯实战应用【算法代码篇】-图论算法(附C++代码)
图论算法在计算机科学中扮演着很重要的角色,它提供了对很多问题都有效的一种简单而系统的建模方式。很多问题都可以转化为图论问题,然后用图论的基本算法加以解决。图论(Graph Theory)是离散数学的一个分支,是一门研究图(Graph)的学问。图是用来对对象之间的成对关系建模的数学结构,由"节点"或"顶点"(Vertex)以及连接这些顶点的"边"(Edge)组成。值得注意的是,图的顶点集合不能为空,但边的集合可以为空。图可能是无向的,这意味着图中的边在连接顶点时无需区分方向。否则,称图是有向的。原创 2022-09-15 04:45:00 · 171 阅读 · 0 评论 -
蓝桥杯实战应用【算法知识篇】-快速排序算法(附Java、Python和C++代码)
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。原创 2022-09-13 04:15:00 · 202 阅读 · 0 评论 -
蓝桥杯实战应用【算法知识篇】-分治法介绍及关键点解析
在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治法可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化。原创 2022-09-14 04:30:00 · 235 阅读 · 0 评论 -
蓝桥杯实战应用【赛题解析篇】-快速设计一个高效的求a的n次幂的算法(附Java和C++代码)
所以考虑让a的指数翻倍增长,即(1,2,4,,8...n),即每次res=res*res (res初始为a) 而不是res=res*a ,这样的话res=2^k, 每次res 翻倍 k 可能会超过 n ,所以需要判断条件。对于增长到指定数类的题目,当基数呈指数级增长时,时间复杂度为O(log(n)),这里就是要让a的指数从1到n呈指数增长,而不是1,2,3...n这样子。实现方法第一次翻2倍,第二次4倍,...,第n次2的n次方倍。设计一个算法,求解a的n次幂问题。输出一个整数,表示a的n次幂。原创 2022-09-08 04:45:00 · 335 阅读 · 0 评论