C++
Lilyan_blog
这个作者很懒,什么都没留下…
展开
-
二叉树的基本操作
二叉树先序和中序确定二叉树后序以及中序确定二叉树// 指针版本struct node{ typename data; node* lchild; node* rchild;}// 二叉树建树前根节点不存在,一般设为NULLnode* root = NULL;// 生成一个新节点, v为结点权值node* newNode(int v) { node* Node = new node; Node->data = v; Node->lchild = Node->原创 2022-03-08 11:47:32 · 467 阅读 · 0 评论 -
C++中读取字符串的方式
这里写自定义目录标题]C++读取字符串的两种方式1. getline(): 读取行的输入2. get(): 读取行的输入C++读取字符串的两种方式1. getline(): 读取行的输入getline函数读取整行, 它使用通过回车键输入的换行符来确定输入结尾。想要使用该方法可以用:cin.getline();// 该函数有两个参数// 参数1: 存储输入行的数组名称// 参数2: 读取的字符数// 假设使用getline() 将命名读进一个数组名为name长度为20的数组中cin.getl原创 2021-07-12 21:29:24 · 10955 阅读 · 0 评论 -
搜索入门——全排列问题
1.问题描述:2.算法分析:这道题目其实是搜索入门的一道题搜索,可以使用dfs来搜索,怎么搜索呢,首先我们输入一个n,这个n代表全排列1-n,使用dfs搜索的话,我们要确定边界出口,我们是一步一步去试,每一次次数step + 1,当step比n大的时候就跳出递归,但是我们需要多次搜索,所以需要在选数的时候添加一个记录这个数选与没选的vis标记数组,其实dfs是有模板的,如下:void df...原创 2019-01-29 15:49:06 · 589 阅读 · 0 评论 -
搜索入门——小学数学问题
1.问题描述:2.算法分析这道题目使用暴力枚举以及dfs(深度优先搜索)都可以解决。a.暴力枚举:首先我们需要确定枚举的范围:这道题目有12个空,如果枚举12个空的值则需要写12个循环,程序会跑不起来。其实我们只需要枚举算式左边的八个空格,然后右边的空格通过计算来判断即可,这样就是8个循环,全部枚举完就是128这样一个时间复杂度,通常计算机计算1s的时间复杂度是109差不多接近了,...原创 2018-12-03 08:48:38 · 625 阅读 · 0 评论 -
蓝桥杯VIP——黑色星期五
1.问题描述2.算法分析典型的日期计算,其实就是枚举思想,首先我们确定从1998.1.1日周四开始枚举,然后判断该年是否为闰年,再去判断当星期数为8时我们需要将星期数重置为星期1开始,当每天的天数等于月末+1天时重置天数为下个月1号,当月份为13时跳出循环,年份+1,再依次循环。最后输出即可。提示:这里有几个坑:首先你判断月末和星期数都要+1而不是星期7就变为1,而且月末+1天也是个坑...原创 2018-12-03 14:49:05 · 713 阅读 · 0 评论 -
汉诺塔递归问题进阶
1.问题描述2.算法分析相信大家对汉诺塔经典的递归问题都有所了解,给你ABC三个柱子,n个盘子放在起始柱子A上,盘子的排列从上至下依次有小到大排列。小的盘子必须放在大的盘子上面。我们每次递归前都将n-1个盘子借助C柱子移动至B柱子,然后我们再将最大的盘子移动至C柱子即可。可以定义一个汉诺塔函数:void hanoi(int A, int B, int C, int n){ if ...原创 2018-12-22 09:10:18 · 560 阅读 · 2 评论 -
括号匹配问题
1.问题描述:2.算法分析:括号匹配问题是比较经典的问题。我们可以使用栈这样的数据结构来解决。我们扫描字符串压将‘(’入栈中,然后如果是’)’我们则可以从栈中弹出一个’('来与之匹配,这样就可以解决并保证最近的两个括号相匹配了,根据题目要求我们在记录下匹配的位置即可。因为题目中说答案不唯一就是说位置可以换一下。比如样例一输出1 42 3如果我们输出2 31 4这样子也是可...原创 2018-12-22 20:01:27 · 473 阅读 · 0 评论 -
递归入门——数的计算
题目描述2.算法分析:这道题目我们先找规律,比如输入0,1的时候那么肯定只有本身了,所以f[0] = f[1] = 1然后发现2的时候,2本身加上12,所以f[2] = 2,当为3时本身3加上13也是f[3] = 2.。。。。。f[4] = 4 —— 4,14,24,124f[5] = 4——5,15,25,125f[6] = 6——6,16,26,36,126,136f[7] ...原创 2019-01-19 21:14:16 · 863 阅读 · 0 评论 -
搜索进阶——数独问题
1.问题描述:2.问题分析:这道题目是比较经典的搜索问题,当你学会怎么解八皇后问题的时候,就慢慢的进入了搜索之道,这一道题目比较难的点就是33的格子内填充的数不能重复。行和列不重复很简单,怎么判定重复与否,我们将数独棋盘分为9个33的棋盘并且将其编号:可以发现规律每一个编号的33的格子为当前的x,yx / 3 * 3 + y / 3我们可以在主函数里通过设置判断行,列,33格子是...原创 2019-02-03 16:43:31 · 1588 阅读 · 1 评论 -
计蒜客——机器人
1.题目描述:2.算法分析:首先我们知道机器人初始状态是在坐标原点,方向是朝右边的。我们也知道在坐标轴上,在排除斜线移动一共就上下左右四种方向移动。我们看题目可以发现一共有四个指令,forward前进指的是在当前方向前进多少单位长度back调头再前进是指当前方向相反方向前进多少个单位长度。left向左是指当前方向逆时针旋转90度后的方向前进 多少个单位长度right...原创 2018-11-28 14:51:29 · 802 阅读 · 0 评论 -
C++十进制转换任意进制
1.题目描述:2.算法分析:如上是将十进制转换1-16进制,并且有可能会输入负数首先我们先考虑当输入的要转换的数为0,那么不管是任何进制,转换都是0.然后考虑进制是否小于10,因为大于等于10之后的进制需要使用字符’A’-‘F’.考虑进制小于10之后我们又需要考虑需要转换得数是否是负数。先考虑正数,用短除法,但是需要注意所取得余数应该逆序输出,所以应该存入字符数组或者字符串操作。...原创 2018-11-28 09:34:11 · 6463 阅读 · 0 评论 -
计蒜客——浮点数排序
1.题目描述:2.算法分析:首先肯定是定义一个double类型数组存放数据,然后的一个问题是怎么判断浮点数最近的整数的差,使用round函数即可floor : 不大于自变量的最大整数ceil :不小于自变量的最大整数round:四舍五入到最邻近的整数floor(),ceil() 需包含头文件math函数库具体可以查C++帮助文档然后我们使用C++的sort函数进行排序,...原创 2018-11-27 15:06:28 · 2492 阅读 · 0 评论 -
蓝桥杯——四平方和
1.问题描述:2.算法分析:这道题目简单粗暴,枚举暴力算法,但是你不能死死的写四个for循环去判断,适当的剪枝会使得你的程序跑起来更快,并且需要注意不要你输出全部的组合,只要输出按照字典序排序输出。什么是字典序?这么说吧在这里比较的就是你的ASCALL值把,0的比1小,字母a比A大,所以你枚举只需要输出最小的能满足条件的a,b,c,d就要跳出所有循环了。如果不是只求出字典序最小的组合,...原创 2018-11-29 20:59:10 · 598 阅读 · 0 评论 -
A+B for Matrices
1.题目描述This time, you are supposed to find A+B where A and B are two matrices, and then count the number of zero rows and columns.输入The input consists of several test cases, each starts with a pai...原创 2018-11-25 15:46:45 · 291 阅读 · 0 评论 -
最大子阵
1.题目描述:2.算法分析:其实这道题目最好用的是DP(动态规划)+ 前缀和 组合起来的算法,时间复杂度为O(103),单独用DP为O(104),使用枚举发现还行在这个数据范围内的时间复杂度为O(10^6),但是能效率高还是用效率高的算法。a.使用枚举算法其实就是枚举矩阵的上界下界左界右届,在每个不同的边界围成的矩阵来计算元素和,即可。b.DP…待更新c.Dp+前缀和3.源...原创 2018-11-28 21:15:37 · 172 阅读 · 0 评论 -
C++中sort函数从大到小排序的两种方法
1.sort函数描述而且,sort函数的算法效率相当于快排,使用sort函数有时候可能比我们自己写一个排序算法,可能效率更高。2.使用sort函数排序#include <iostream>#include <algorithm>using namespace std;int main() { int arr[] = {2, 4, 5, 3, 1}; ...原创 2018-11-25 22:09:18 · 104967 阅读 · 6 评论 -
计蒜客——节假日
1.问题描述日历有阳历(公历)和阴历(农历)之分。每年都有法定节假日,这些分成三类——双休、阳历节假日、阴历节假日。1.双休1)周六和周日2天2.阳历节假日1)元旦:阳历每年1月1日,放假1天2)劳动节:阳历每年5月1日,放假1天3)国庆节:阳历每年10月1日,放假3天4)圣诞节:阳历每年 12 月 25 日,放假1天3.阴历节假日1)春节:阴历每年1月1日,放假3天2)清...原创 2018-11-23 18:13:27 · 1201 阅读 · 2 评论 -
第六届蓝桥杯代码填空——循环节长度
1.题目描述:要求你在下述代码填充#include <iostream>#include <algorithm>#include <vector>using namespace std;int f(int n, int m) { n = n % m; vector<int> v; for(;;) { ...原创 2018-11-21 09:19:51 · 560 阅读 · 0 评论 -
三大基础排序(冒泡排序,选择排序,插入排序)思想
1.冒泡排序1-1 思想:冒泡排序思想:从数组的下标为0的元素开始,首先将下标为0的下标与数组下标为1的元素比较,如果数组下标1的元素更小,交换,接着比较下标1与下标2的元素,如果下标2较小则交换,反之接着将下标2与下标3比较。。。以此类推,经过n-1趟排序就可以得到结果 。比如5,4,3,2,1第一趟:5,4比较交换。交换后:4,5,3,2,15,3比较交换。交换后:4,3,5...原创 2018-11-07 20:19:39 · 633 阅读 · 0 评论 -
DP经典问题——最大子段和
1.问题描述:最大子段和是一个经典的DP问题。比如给定一个序列: 2, -1 , 3 , -5 , 3可以推测出最大子段和为 2 - 1 + 3 = 4题目要求输入一段序列,输出最大的子段和。2.算法分析:什么是子段和?就是在整个序列的子区间中最大的和。我们首先要找到这个问题的状态转移方程。如何设计状态?我们可以发现一个问题,我们可以将每一个子区间的和算出来。比如我们使用dp...原创 2019-02-14 19:11:33 · 2643 阅读 · 0 评论 -
约瑟夫环——队列实现
1.问题描述:约瑟夫环这个经典的数据结构链表问题,想必大家都有所涉及。2.分析:我们怎么用队列去实现这个问题呢,首先我们要将所有的人进行入队操作,因为编号是1…n,那么我们使用一个循环压入就行。for (int i = 1; i <= n; i++){ q.push(i);}然后我们会发现只要留下最后一个人即不再报数了,所以我们可以判断当队列的长度大于1时便让队列一直进行报...原创 2019-02-05 17:52:52 · 4105 阅读 · 1 评论 -
图的遍历——dfs OR bfs
1.什么是图的遍历?从图的某一个顶点出发,沿图中的路径依次访问图中的所有顶点,并且使得图中所有顶点都恰好被访问一次,这一过程即为图的遍历。注意:这里讨论的图特指连通图上进行遍历。2.图的遍历——dfs(深度优先搜索)简介:开始我们假设图上所有的顶点都未被访问,选择图中任一顶点,开始执行以下操作:1.访问当前顶点v,并将该顶点标记为已访问。2.遍历与顶点v相邻的所有顶点c,然后对顶点v所...原创 2019-04-30 20:00:27 · 416 阅读 · 0 评论 -
并查集练习题以及带权并查集简介
1.并查集模板(luogu——P3367)1.问题描述:题目链接2.分析:这道题目就是一道普通的并查集模板题目,只要对并查集的初始化,查找,合并有所了解或者看到上一篇介绍并查集算法的文章,直接敲即可,这里不过多赘述。3.AC_Code:#include <bits/stdc++.h>using namespace std;const int maxn = 1e4 + 5...原创 2019-04-29 21:14:09 · 788 阅读 · 0 评论 -
高级数据结构——优先队列求n个最小和
1.优先队列的简介:想必我们之前了解过了队列这个数据结构。利用队列的先进先出的性质,可以解决很多实际问题,但对于一些特殊的情况,队列是无法解决的。例如,我们在医院里,重症急诊患者肯定不能像普通患者那样依次排队就诊。这时候我们还是使用队列的先进先出的原则,那重症患者不就凉凉了,所以我们要使用一种更高级的数据结构——优先队列,先访问优先级高的元素。优先队列的操作与普通队列差不多。但是相比于队列...原创 2019-04-23 21:54:24 · 474 阅读 · 0 评论 -
基础数据结构——二叉树的遍历
1.二叉树的递归定义:a.要么二叉树没有根节点, 是一棵空树。b.要么二叉树由根节点、左子树、右子数组成,且左子树和右子树都是二叉树。通俗的解释一波:一个家族里面,可以把爷爷说成父亲的父亲,而曾祖父则为父亲的父亲的父亲,这样家族里自己的直系血缘的男性都可以用"父亲"这样的递归定义来定义了。下面给出几种二叉树图:D为完全二叉树, E为满二叉树。2.完全二叉树与,满二叉树:a.满二叉...原创 2019-04-22 22:07:06 · 322 阅读 · 0 评论 -
数据结构——图基础练习题
主要记录在学习图的基础所在练习题目的题集:1.关系查询:a.题目描述:b.分析:其实这一道题目是让我们查询一个无向图的两个顶点是否有边存在,因为a把b当做朋友,b也要把a当做朋友,所以我们可以把a,b看做图中的顶点,在无向图中a如果和b构成边则他们互相就是朋友了,这是必然的。接下来我们要处理的是输入的数据是字符串,那么我们可以想到用hash或者map将字符串转成唯一的int整型来对应...原创 2019-04-17 22:11:07 · 2197 阅读 · 0 评论 -
高级数据结构——并查集基本操作
1.并查集概述:a.什么叫并查集?从字面意思理解,并就是合并,查就是查询,集就是集合的意思。并查集是一种用于分离集合操作的抽象数据结构类型。它所处理的是集合之间的关系,即动态维护和处理集合元素之间复杂的关系,当给出两个元素的一个无序对(a,b)时,需要快速合并a和b所在的集合,这期间需要反复查找某个元素所在的集合。b.简介:在这种数据类型中,n个不同的元素被分为若干组,每组是一个集合,这...原创 2019-04-21 19:53:28 · 864 阅读 · 0 评论 -
PAT 甲级1059 Prime Factors
1.问题描述:题目意思是给定一个整型范围内的n求出这个n能够分解的质因数,若某一个质因子的分解个数超过一个那么使用^次方表示,比如4 = 2 * 2就要写成4 = 2 ^ 2.这样的形式。2.算法分析:其实这一道题目是一道纯数学知识题,首先我们要理解质因子,质数就是素数,我们需要先用线性筛筛出一定范围的素数,打个表。这里给出埃式筛法,时间复杂度为O(nlogn)#include <...原创 2019-03-18 09:58:51 · 302 阅读 · 0 评论 -
C/C++高精度四则运算模板
1.高精度加高精度(加法)模拟小学算式1 4 7+ 6 52 1 2现在模拟这个算式即可从低位到高位每一位相加7 + 5 = 12 这一位应该为2, 而进位则为12 / 10 = 14 + 6 + 1 = 11 这一位为1,而进位则为11 / 10 = 1;1 + 0 + 1 = 2 这一位为2直接给模板代码,给出一定注释,因为时间原因,暂时解析后补。...原创 2019-03-19 19:57:00 · 1729 阅读 · 7 评论 -
第六届蓝桥杯省赛B组——加法变乘法
1.问题描述:加法变乘法我们都知道:1+2+3+ … + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+…+1011+12+…+2728+29+…+49 = 2015就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。注意:需要你提交的是一个整数,不要填写任何多余的内容。...原创 2019-03-13 21:55:30 · 423 阅读 · 0 评论 -
DP经典问题LIS——最长上升子序列
1.问题描述:2.算法分析:因为是初学,只学习了O(N^2)的算法复杂度。最后,我们将dp数组的最大值是最长上升子序列的长度。推荐一篇文章包含了O(nlogn)的LIS算法。LIS推荐3.源代码:#include <iostream>#include <cstring>using namespace std;int dp[101], a[101],...原创 2019-02-20 20:06:01 · 322 阅读 · 0 评论 -
PAT乙级1017(A/B)简单高精度
1.问题描述:2.算法分析:这道题目是最近看到PAT乙级的一道题目,大概是这么个思想,明显1000位超过了long long,我们需要用字符串来存储数组,但是因为除数只是个位数,我们只需要模拟除法过程即可,首先我们要考虑到特殊情况,如字符串的长度为1时,那么商就应该是第一个字符与除数相除,那么商就应该是第一个字符与除数mod,对于特判后,我们应该考虑字符串长度大于1时,我们就模拟除法。比如...原创 2019-03-01 20:26:10 · 281 阅读 · 0 评论 -
整数划分问题——递归,dfs求解
1.问题描述:给定任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。当n = 7,共有14种拆分方法:2.算法分析:这道题目我们可以想到其实应该用递归来做,而dfs又是可以使用递归求解,我们首先可以在递归函数里进行拆分的枚举,需要拆分的数应该是能够由哪一些数相加,怎样设计递归函数dfs呢,我们应该清楚应该拆分n,比如n为7的时候,我们先拆了1,那么n还剩下6对吧,所以我们设计...原创 2019-02-25 19:32:05 · 634 阅读 · 0 评论 -
DP入门——硬币问题
1.问题描述:硬币问题是比较古老而又经典的问题,即给定需要凑的硬币,给定几种面值的硬币,问最少所需要的硬币个数凑成。比如 给定15 硬币面值为1 ,5,11三个面值即输入 15输出为最少的硬币个数:32.算法分析:其实硬币问题也可以算是贪心问题,比如给定面值为100 ,50,10,1的面值,我们给定666,如果凑666的话,我们可以从大的凑,再从小的凑,比如666 = 6 * 10...原创 2019-02-14 14:30:37 · 2903 阅读 · 2 评论 -
DP经典问题——马过河卒
1.问题描述:2.算法分析:f[0][0] = 1;for (int i = 0;i <= n; ++i) { for (int j = 0; j <= m; ++j) { if (i != 0) { f[i][j] = f[i][j] + f[i-1][j]; } if (j != 0) { ...原创 2019-02-13 19:28:48 · 455 阅读 · 1 评论 -
迷宫问题——BFS实现
1.问题简介:迷宫问题是学习搜索入门很好的一个经典问题,比如给定一个迷宫,给定起点并且给定终点,让你求出起点到终点的最短步数。比如2.算法分析:先比较一下dfs和bfs的区别,dfs会比较慢,为什么呢,因为dfs会先从某一行和某一列进行搜索,搜索到底部,而之前也介绍过bfs是一层一层的进行扩散,就是将这个点的能走到的点都访问。为什么bfs在求最短路的时候快一些呢,因为它是层层扩散,找到的...原创 2019-02-06 18:12:09 · 1728 阅读 · 0 评论 -
BFS广度优先搜索入门
1.BFS简介:2.BFS与DFS的区别:3.实现BFS的准备:最常用的BFS的模板如下:void bfs(起始点) { 将起始点放入队列中; 标记起点访问; while (如果队列不为空) { 访问队列中队首元素x; 删除队首元素; for (x 所有相邻点) { if (该点未被访问...原创 2019-02-06 15:35:47 · 431 阅读 · 0 评论 -
计蒜客打印锯齿矩阵
1.问题描述:2.算法分析:因为发现数组的长度不是固定的,而是可变的,所以我们不能使用静态数组,我们可以使用动态数组vector来做。先确定使用的数据结构vector然后就是先对数组赋值,将比如上题将12个元素赋值,然后有一个要注意的点,就是如果某一行都没有数据,那么,直接换行空一行出来。当没有数据的时候vector数组的长度必然为0再依次打印即可。3.源代码分析:#...原创 2018-11-02 20:19:35 · 397 阅读 · 0 评论 -
C++递归实现十进制转二进制、八进制、十六进制
大家可以关注一下本人自建Blog:http://47.107.118.1841.转二进制与八进制分析我们最熟悉不过的就是短除法将十进制转二进制,将余数倒着输出便是该是十进制的二进制数,那么很容易想到拿十进制数n%2(或者8)这样可以得到最高位的二进制(八进制)数,然后将n/=2(8)继续取余,这样就可以得到下一位,我这里使用字符数组存储,因为2进制只有0-1两个字符,八进制则是0-7 8个...原创 2018-11-04 18:13:40 · 10500 阅读 · 0 评论 -
最长上升子序列问题
最长上升子序列:给出一个数列{a1,a2,a3.....an},要求你选出尽量多的元素,使这些元素按其相对位置单调递增。例如,输入:5 8 9 2 3 1 7 4 6输出:2 3 4 6最长上升子序列长度为:4#include<iostream>using namespace std;int b[200][4];int main(){ int n; ...原创 2018-10-15 19:40:13 · 682 阅读 · 0 评论