蓝桥杯题目总结
这不蓝桥杯大赛和GDCPC快到了,提前准备好学习重点
目录
1. 题目类型
2. 常用算法
题目类型
字符串处理
字符串处理较常见的例如字符的正则表达式匹配或字符串排序成特定序列等
正则表达式题型可能是要判断字符串中含有几个要求的字串(如果是,那么极有可能下坑)
例如GDCPC2019的L题,就是判断两个字符串是否相等
Do you feel weird when reading the problem title? You can understand
word meanning correctly even if its spelling is wrong,According to
research if the initial and last letter of the word are right, and
just swap the others, human can correct the soelling of the word
automatically. Now , giving you a word and its correct spelling , can
you correct it automatically?
题目大致意思就是给出两个字串,如果全等就输出equal,首尾相同但是中间是打乱的就输出yes,否则就输出no。那么这种题我们应该逐层递进,首先是判断全等,如果是就输出equal就完事了,如果不是则转到yes和no的输出,然后来判断首尾是否相同和中间字符是否按照题意即可
特殊数字处理
蓝桥杯中最常见的一种题,代入了比赛年份,基本每年都有。(在蓝桥杯中,这类题目一般都可以暴力破解出来,即循环多次运算解得)
没有固定套路,但是一般暴力破解的时候都是可优化的
第十届蓝桥杯C语言B组的试题C数列求职:
给定数列1,1,1,3,5,9,17,…,从第4项开始,每项都是前3项的和。求 第20190324项的最后4位数字。
树与图
这类题型一般考验的是对树和图的遍历,其中树的遍历主要包括了深度优先遍历和广度优先遍历
矩阵求和
经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作。 今天小明的任务是填满这么一张表: 表有 n 行 n
列,行和列的编号都从1算起。 其中第 i 行第 j 个元素的值是 gcd(i, j)的平方, gcd
表示最大公约数,以下是这个表的前四行的前四列: 1 1 1 1 1 4 1 4 1 1 9 1 1 4 1 16
小明突然冒出一个奇怪的想法,他想知道这张表中所有元素的和。 由于表过于庞大,他希望借助计算机的力量。
「输入格式」 一行一个正整数 n 意义见题。
「输出格式」 一行一个数,表示所有元素的和。由于答案比较大,请输出模 (10^9 + 7)(即:十亿零七) 后的结果。
「样例输入」 4
「样例输出」 48
数列
主要是对一些比较常用到的数列:例如斐波那契数列等
第十届蓝桥杯C语言b组C题:
给定数列:1 1 1 3 5 9 17 … ,从第四项开始每个数字都是前三项的和,求第20190324项的最后四位数字
队列与栈
经常会以树和图的方式一起出,需要掌握栈的使用方法,并与问题联系起来
排序与查找
排序
排序按照原理可分为比较排序和非比较排序,其中比较排序包括转换,插入,选择和归并排序
- 比较排序
-
转换:
包括了冒泡排序和快速排序两种,都是通过比较两个值的大小然后进行转换位置的方式来实现排序,其中: -
插入:
包括了插入排序和希尔排序,都是将待排序序列分为两部分,每次将未排序的序列的第一个值插入到已排序序列合适的位置来排序,其中: -
选择:
包括了选择排序和堆排序,都是将待排序序列分为两部分,每次从未排序序列中选择一个最小的值插入到已排序序列的末尾,其中: -
归并排序⑦:
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
-
时间问题
计算日期差或者时间差等等问题
数学问题
联系生活的一些问题或者一些名人的数学公式以及猜想,重点就是读懂题目并且多实验数据
常用算法
分治算法
分治算法的基本思想就是分而治之。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。
分治法所能解决的问题一般具有以下几个特征:
1) 该问题的规模缩小到一定的程度就可以容易地解决
2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
3) 利用该问题分解出的子问题的解可以合并为该问题的解;
4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
分治算法主要分三步:分解、解决、合并
经典解题:汉诺塔、二分搜索、快速排序
贪心算法
贪心算法讲究的是效率,贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。所以贪心算法的出的结果是局部最优解
但是这并不妨碍贪心算法的优点:从每次对问题的迭代中取局部最优解,所以就算不是全局最优解,也是类似全局最优解的结果
对于人民币的面值有1元 5元 10元 20元 50元 100元,下面要求设计一个程序,输入找零的钱,输出找钱方案中最少张数的方案
动态规划
相比于只考虑眼前情况的贪心算法,动态规划更像是一个考虑全局状态的一种算法思想,动规将一个问题拆成多个子问题,然后从中筛选出最优秀的解法,正所谓大事化小,小事化了,动规会权衡分析下一个状态的最优解,大问题的最优解由小问题的最优解得出
最短路径问题、背包问题
分支限界
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。最终是为了在解空间树中找到最后的解,每次非最终结果的返回都会选择性的将一些解空间树的分支给裁掉,所以会限界。过程就是将结果的可能表示出来,然后排除掉不会成为最终结果的值