蓝桥杯
Jaster_wisdom
程序员
展开
-
蓝桥杯-2的次幂表示
问题描述:任意整数都可以用二进制表示,比如:137的2进制表示为10001001 可得到如下表达式:137=2^7+2^3+2^0。 进而可以表示成:2(7)+2(3)+2(0) 而7又可以表示成2(2)+2+2(0),3可以表示 成2+2(0) 所以137可以表示成:2(2(2+2(0))+2)+2(2(2+2(...原创 2018-03-06 19:58:24 · 490 阅读 · 0 评论 -
蓝桥杯-核桃的数量 (求三个数的最小公倍数)
题目大意:输入三个数,求出三个数的最小公倍数题目解析:为了求出三个数的最小公倍数,我们可以先求出其中两个数的最小公倍数,然后再将它与第三个数求一个最小公倍数。我们知道,最大公约数的求法可以通过欧几里德算法(辗转相除法)求解。辗转相除法:求两个数a,b的最大公约数的一般方法。假定(a>=b),不断地求a,b相除得到的余数,直到余数为0. 若余数不为0,将b的值赋给a,将余数的值赋给b. 最后输...原创 2018-03-20 16:07:10 · 909 阅读 · 0 评论 -
蓝桥杯-连号区间数
题目大意:给定1-n之间的一种排列数,求出存在多少个区间,满足区间内的数经过排序之后是连续的。分析:将所有的区间情况遍历出来,然后判断在每个区间上,数字是不是连续的。判断方法:求出区间上数字的最大值和最小值,然后判断他们的差值是不是等于区间上元素个数-1。 比如,序列3,4,2,5 最大的数是5,最小的数是2。 5-2=元素个数4-1=3 所以该区间满足条件注意所有的单个数都是满足条件的,所以当第...原创 2018-03-21 13:08:03 · 479 阅读 · 0 评论 -
蓝桥杯-未名湖边的烦恼 (递归和递推解法)
题目大意:有一群人要还鞋,一群人要租鞋。还鞋的每个人叫做A,租鞋的人叫做B,每个A和每个B之间没有区别。求出有多少种排序方法,使得不会出现租鞋不够用的情况?分析:每一种合理的排序方法必须满足:无论截止到哪个人,在他前面并且包括他,还鞋的人必须大于等于租鞋的人的数量。解法1:递归法当第i个人要去排队时发现,另一类人已经全部排完了,那么解法只有一种了。比如:一个A去排队时,所有的B已经拍好了,那么所有...原创 2018-03-21 15:08:34 · 864 阅读 · 2 评论 -
蓝桥杯-合并石子 (经典动态规划)
题目大意:假设有一排n堆石子,每堆石子有若干个小石子,要求将它们合并成一堆,需要花费的最小代价。而且每次合并只能将相邻的两堆合并,合并的代价是两堆石子的重量之和。题目分析:因为不能合并有间隔的石子堆,所以这不是一道哈夫曼树的例子(哈夫曼树:利用贪心算法,每次合并重量最小的两堆石子)。通过分解子问题,我们可以发现,当只有一堆石子时,合并代价为0;当有两堆石子时,合并代价是两堆石子重量之和;当有三堆石...原创 2018-03-25 21:54:09 · 3438 阅读 · 3 评论 -
蓝桥杯-C++ CH08 01
题目大意:求分数的最简形式和判断大小分析:由于题目中已经给我们写好了部分函数,所以我们只要将运算符重载的几个友元函数补充完整即可。值得注意的是,在比较分数大小时,要将其中的某个数转化成float型,否则会强制转化为int型,导致部分数据出错。第二个运算符>>,好像对于解答题目没什么用处。 主函数中的输入>>并没有使用重载的形式。代码展示:ostream& opera...原创 2018-03-21 16:19:10 · 406 阅读 · 0 评论 -
蓝桥杯-三角形 已知三点求三角形周长、面积、外心、重心
题目大意:已知三点求三角形周长、面积、外心、重心,将结果保留两位小数题目分析:周长很好求,只要将三条线段的长度相加即可。面积的求法有专门的公式,比较快捷。外心是三角形三条线段上中垂线交点,求法是求出两条中垂线,然后求它们的交点即可。重心是三条中线的交点,只要求出三点的均值即可。((x1+x2+x3)/3,(y1+y2+y3)/3)代码展示:#include <iostream>#in...原创 2018-03-26 08:26:03 · 5920 阅读 · 0 评论 -
蓝桥杯-字符串比较函数 实现strcmp函数
题目大意:自己动手实现strcmp函数,功能是能够比较两个函数的大小,若s1>s2返回1,若s1<s2返回-1,否则返回0题目分析:分别从左至右扫描两个字符数组,发现当前的两个字符相等,则分别往后移动一位。当发现不等时或者有一个到了末尾位置,即可停止扫描,进行判断大小。因为字符的最后一位是‘\0’,比任何ASCII字符都小,所以不需要单独处理代码展示:#include <iost...原创 2018-03-26 08:50:25 · 1192 阅读 · 0 评论 -
蓝桥杯-最大的算式
题目大意:给定一个数字序列,要求在其中插入固定个数的*和加号+,使得算式的结果最大。题目分析:我们用sum[i]保留前i个数的和,用dp[i][j]保留前i个数中含有j个乘号的最大的结果。那么我们最终要求的是dp[N][K]。显然,dp[i][0]=sum[i],因为没有一个乘号,所以就相当于求前n项和。我们自底向上求解。以题干中的数据为例子:N = 5, K=2五个数分别是:1 2 3 4 5i...原创 2018-03-22 00:43:45 · 879 阅读 · 2 评论 -
蓝桥杯-九宫重排 (搜索)
问题描述:在九宫格中放置8个数,有一个为空格。给定初始状态九宫格,和目标状态九宫格,问需要多少步可以将初始状态变成目标状态。如果无法达到输出-1,如果可以达到,输出最少的步骤数。问题分析:本题属于搜索算法中的经典题目。可以用很多方法来解答,一般有A*算法和广度搜索BFS。因为广度搜索较容易理解,所以这里就用BFS来解答。已知一个初始状态,如何利用BFS,搜索到最终状态?如下图所示,每一次画出当前可...原创 2018-03-27 08:52:43 · 2076 阅读 · 1 评论 -
格子刷油漆 (递推)
题目大意:一个2*X的格子矩阵,请问有多少种刷油漆的方案?每次只能刷一个格子,刷完一个格子,然后只能刷它左右或者斜对角线上的格子。题目分析:要求的是刷漆顺序的总数。ACEGIKNPBDFHJMOQ假设我们有以上的格子矩阵,我们可以有以下几种刷漆方案:一. 1.先刷第一列,然后刷第二列,再刷第三列…… 对应到表中,也就是先刷A,B两格,再刷C,D两格……如果用a[i]表示从一个端点(假设是A)开始的...原创 2018-03-27 20:08:26 · 865 阅读 · 0 评论 -
蓝桥杯-结点选择 (树形动态规划)
题目大意:给定一棵树,每个结点存储一个权值,从树中选择某些结点,使得总的权值最大。在选择结点时,有一个要求:当选定一个结点时,与该结点相连接的结点就不能选取。题目分析:方法:深度搜索+树形动态规划。对于每个点,有两个选择,分别是选和不选。对于第i个结点,我们用dp[i][0]表示不取该结点,所能达到的最大值;dp[i][1]表示取该结点,该结点所能达到的最大值。第一种情况,当我不取第i个结点,当前...原创 2018-03-20 14:19:07 · 1895 阅读 · 0 评论 -
蓝桥杯-数字游戏
问题描述: 给定人的个数n, 取的模值k, 栋栋要报的数字个数T, 求T个数字之和问题分析: 本题最直接的做法是 模拟这个报数的过程,每两个人之间的差值 在逐渐增加,每次都加一。把每个人要报的数 放在一个sayDigit数组里,这个数组保留n个元素,分别是每轮每个人要报的数,当栋栋报完之后,立即累加到结果中。代码展示:#include <iostream>using namespac...原创 2018-03-24 01:06:32 · 474 阅读 · 0 评论 -
蓝桥杯-最大子阵 动态规划
题目大意:给定一个矩阵,求出它的子矩阵中元素之和的最大值题目分析:这道题明显是用 动态规划来做。我们可以先分析一维数组的情况,num[] = {1,-3,5,2,-6,9},考虑类似这样的数组,要求出它的最长连续子序列和的最大值。我们从左往右扫描,用dp[i]表示以第i个元素为末尾元素的连续子序列和的最大值。也就是第i个元素一定要包括在内。那么,我们可以得到dp[i] = max(dp[i-1]+...原创 2018-03-23 20:00:23 · 1240 阅读 · 0 评论 -
蓝桥杯-Torry的困惑(基本型) 求素数的多种方法
题目说明:求出前n个质数的乘积,并取模50000,其中n的范围是n<=100000题目分析:这是一道求素数(质数)的题目。素数,是除了1和它自身外,不能被其他数整数的数。其中,2 是素数。基本方法可以是,对每个数,判断它是不是素数,很容易求解。这里for循环内遍历到根号n,就可以了,节约一半时间。代码实现1://普通解法:sqrt(n)#include <iostream>u...原创 2018-03-15 22:22:05 · 405 阅读 · 0 评论 -
蓝桥杯试题x^x=10
题目大意是:计算出x^x=10的近似结果,并且将结果保留6位数,题干中提示说,这个值在2和3之间解析:该题用二分法可迅速求解,不断取中间值,如果中间值的计算结果比10小,说明最终结果只可能在中间值的右侧。循环到30次左右,就可以得到有6位小数的结果。要想得到更多位的值,可以设置迭代次数。另外,值得注意的是,控制小数位数的输出。使用头文件:#include <iomanip> 其中,若想...原创 2018-03-03 11:27:48 · 589 阅读 · 0 评论 -
蓝桥杯-7对数字排列问题
问题描述:今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:17126425374635问题是写出以74开头的满足条件的序列。问题分析:根据问题的描述,我们很容易地知道,第7个位置是4,第9个位置是7,任务是将其余的十个数字摆进去。摆放6,2,1的话,只能从第三个...原创 2018-03-03 14:14:04 · 1077 阅读 · 0 评论 -
蓝桥杯-表达式的计算(带括号)
题目大意:这是一道表达式求值的题。题干要求是表达式中可以出现括号,表达式的合法性不需要判断。输出表达式的值。题目分析:这是一道使用栈的常规题,也是栈这种数据结构的经典的应用--表达式求值。首先,我们建立两个栈,一个数字栈,存放数字;另一个存放操作符栈。给每一个运算符一个优先级,规定+,-的优先级为1;*,/的优先级为2;(的优先级为3;)的优先级为0;当面对一个表达式时,我们从左往右依次分析:1)...原创 2018-03-04 11:27:43 · 1280 阅读 · 0 评论 -
蓝桥杯-最短路问题(SPFA算法)
问题描述:给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。问题分析:由于某些边的权值可能为负值,所以Dijkstra算法失效(为什么?因为假设存在一条总长为负的环,那么Dijkstra算法可以一直绕下去,总长在不断减小)。 因为图中最多的结点可以达到20000个,所以使用Floyd算法,时间复杂度O(n^3),明显是超...原创 2018-03-12 00:52:15 · 1070 阅读 · 1 评论 -
蓝桥杯-兰顿蚂蚁 (模拟)
题目大意:根据题中所规定的方法,求出一定步数后,蚂蚁的位置题目分析:本题属于常规的模拟题,就是只要根据题意把蚂蚁每步的移动方向,改变方格的颜色模拟出来即可。我是将四个方向用整数表示,便于后期左转和右转。 规定“上”为0,“右”为1,“下”为2,“左”为3。通过这样的表示,当蚂蚁左转时,可以很方便地用(dir+3)%4来表示;同样的,当蚂蚁右转时,用(dir+1)%4来表示。当更新蚂蚁位置时,即蚂蚁...原创 2018-03-22 15:54:31 · 661 阅读 · 0 评论 -
蓝桥杯-矩阵乘法
题目大意:有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。题目分析:本题是计算一系列连乘矩阵的最小运算次数。这是一道非常经典的动态规划的题目。动态规划算法的特点是:1.把原始问题划分成一系列子问题2.求解每个子问题仅一次,并将...原创 2018-03-13 01:37:33 · 944 阅读 · 0 评论 -
蓝桥杯-操作格子(线段树)
题目大意:多次求出定区间上的最大值和区间上元素之和。因为这里可能求解的次数达到100000次,而数组长度最大也为100000,我们知道求最大值和元素之和,若是用数组存储,最快也要O(n)的时间才能完成,这样的话,必然超时。题目分析:根据提示,我们使用线段树来解决,使得在区间上求和、求最大值的时间复杂度在O(logn)建立线段树、插值、查询最大值、查询和都需要递归操作,对一个树的操作,就是分别对于左...原创 2018-03-19 22:29:29 · 448 阅读 · 0 评论 -
蓝桥杯-数字三角形
题目大意:编写程序计算从三角形顶部到底部的某处的一条路径,使得该路径所经过的数字的总和最大。●每一步可沿左斜线向下或右斜线向下走;●1<三角形行数≤100;●三角形中的数字为整数0,1,…99;题目分析:很好的一道动态规划的例子。解题思路是自底向上分析,既然这条路径能从顶部到底部,那么从下往上看,也是等效的。我们设cost[i][j]表示包含第i行,第j列的数字的当前最大值。比如,从下往上看,co...原创 2018-03-13 20:06:23 · 642 阅读 · 0 评论 -
蓝桥杯-字符统计
题目大意:给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。题目分析:枚举所有可能的子串,统计出现次数,找出符合条件的那个。在枚举的过程中要按照长度的大小存储子串,因为以某个字母为首的子串,长度越长,优先级越高。此外,按照出现的前后,同样次数的出现的越早,优先级越高。此外,用map...原创 2018-03-13 22:02:05 · 739 阅读 · 0 评论 -
蓝桥杯-幸运数 (模拟)
题目大意:根据幸运数的条件,不断地将幸运数的倍数删去,留下的就是幸运数。要求的是在某个区间,幸运数的个数。题目分析:这道题直接模拟删除的步骤,就可以得到一个幸运数的数组,然后在数组中求给定区间上的幸运数的个数即可。代码解释:首先将2的倍数从数组中刨去,那么num数组中就只剩下1,3,5,7,9,11,13……然后我取到数组中的第二个数,也就是3,将所有位置是3的倍数的数删掉,也就是将不是3的倍数的...原创 2018-03-28 20:32:36 · 469 阅读 · 0 评论