自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 C++ bfs 的状态表示(六十二)【第九篇】

那我们就可以在表示状态的时候相比之前增加一维,表示现在有没有钥匙,此时的状态为 (x,y,status) ,表示目前我们在 (x,y) 这个点,目前有没有钥匙。无论是深度优先搜索还是广度优先搜索,搜索的过程均会建立一棵 搜索树,搜索树上的每一个结点都是一个 状态,而搜索的过程又可以看作是 状态的转移。相比于普通的迷宫问题,我们就是多了钥匙这个因素,也就是说对于在同一个点的情况,现在手上有没有钥匙,对于后边是不一样的。(sx,sy,0) ,每一次往一个方向走的时候,看这一位走到后是不是钥匙,如果是那。

2024-02-20 23:19:55 385

原创 C++ bfs建模(六十一)【第八篇】

今天我们来学习一下bfs建模。

2024-02-20 23:19:15 502

原创 C++ bfs反向建图(六十)【第七篇】

如果从每个点出发,用 BFS 搜索到终点,那么整体的时间复杂度就是 O(n(n+m)) ,还是比较高的,遇到点数和边数到达 10的5次方 的情况就不行了。我们之前在图上求最短路都是求从起点出发到每个点的最短路,不过有时候我们也会遇到让求每个点到终点的最短路的问题,此时我们可以怎么做呢?所以我们就可以在反向图中从终点开始 BFS,记录下反向图中从终点出发到每个点的最短路,这也就是在原图中每个点到终点的最短路了。这样从终点沿着反向图中的边走过的一条路径,就相当于原图从某个点到终点的一条路径。

2024-02-18 23:59:08 350

原创 C++ 多起点的bfs(五十九)【第六篇】

在普通的广度优先搜索问题中,为了得到从初始状态到达目标状态的最小操作数,则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态,直到搜索到目的状态,或队列为空(无法搜索到目标状态),得到结果。而另一种是我们可以将多个初始状态放入队列中,这些状态在队列中扩展得到的结果仍是一个步数不下降的序列,所以当第一次搜索到目标状态时,仍旧是最小的操作数。在实现这样的问题,主要有两种思路,一是我们可以进行。S1,S2,S3,⋯,求起点(可以为任意一个)到终点。n 次广度优先搜索,并不断更新表示步数的数组。

2024-02-17 21:40:43 401

原创 C++ 图上 bfs(五十八)【第五篇】

除此以外,根据 BFS 的性质,第一次到一个点的时候记下来的步数一定是到从起点到这个点的最小步数,所以我们可以用 BFS 在无权图上求从起点到每个点的最短路。v 时(dis[v]=−1),当前的步数 step 就是从起点到达该点的最短距离,更新。end 的最短路时,则当确定 dis[end] 的值时(已经找到了最短路),结束搜索。在图上,我们也可以进行 BFS,也可以解决图上 DFS 能解决的问题,比如连通块。我们可以用一个数组来存储从起点开始到达每个点的最短距离,设数组为 dis[ ]。

2024-02-15 23:39:10 370

原创 C++ bfs反向搜索(五十七)【第四篇】

T 是唯一的,所以我们可以考虑从 T 开始进行反向搜索,计算出 T 到达每个位置的最短距离 dis[],当我们在输入 S 进行查询时,直接输出 dis[S] 的值即可。例题:在一个长度为 n 的坐标轴上,有一个非常特别的整数位置 T。蒜头君有 Q 次询问,每次询问蒜头君想要知道从整数位置 S 移动到整数位置 T 的最少移动次数。反向搜索:是从目标状态出发进行的搜索,一般用于终点状态唯一,起点状态有多种,且状态转移是可逆的(无向边)情况。按照之前我们学习的课程,对于每次询问,当我们获得。

2024-02-15 23:37:53 347

原创 C++ 广度优先搜索的标记策略(五十六)【第三篇】

如在 《一维坐标的移动》 一题中,假设需要起点或终点的位置非常大,如 1≤A,B≤10的9次方。此时虽然通过 ×2 操作也能够很快搜索到答案,但是由于 A,B 范围过大,不能开辟对应大小的数组,为解决这样的情况带来问题。然而在一些情况下,当前的状态难以简单的标记,如当前状态为稀疏的一维数轴上的点,数组开不下,甚至当前状态可能是一个字符串,根本无法开出标记数组等。set可以起到vis数组的作用,不在set内就代表访没访问过,map可以起到dis数组的作用,记录下来到每种状态的最小步数。

2024-02-15 00:00:00 326

原创 C++ bfs再探迷宫游戏(五十五)【第二篇】

因为 bfs 搜索过程中第一次搜索到终点的时候是最短距离,所以可以让 dis 数组初始化为 −1−1,搜索过程中如果刚搜索到的点的 dis 等于 −1−1,表示这个点是第一次搜索到的点,需要更新 dis 数组。用 DFS 求解迷宫最短路有一个很大的缺点,需要枚举所有可能的路径,读入的地图一旦很大,可能的搜索方案数量会非常多,用 DFS 搜索显然效率会很低。我们可以借助 BFS 来求解迷宫游戏。由于 BFS 是分层搜索,因此,第一次搜索到终点的时候,当前搜索的层数就是最短路径的长度。

2024-02-14 00:00:00 333

原创 C++ 广度优先搜索(bfs)(五十四)【第一篇】

广度优先搜索,又称宽度优先搜索,简称 BFS,我们以后都会用 BFS 来表示广度优先搜索。与深度优先搜索不同的是,广度优先搜索会先将与起始点距离较近的点搜索完毕,再继续搜索较远的点,而深搜却是沿着一个分支搜到最后。BFS 从起点开始,优先搜索离起点最近的点,然后由这个最近的点扩展其他稍近的点,这样一层一层的扩展,就像水波扩散一样。注意这里标记一个点是否访问必须在放入队列的时候标记,避免一个点在队列中但没被访问的情况下再次被放入队列的可能。一般允许进行插入的一端我们称为 队尾 ,允许删除的一端称为 队首;

2024-02-13 00:00:00 740

原创 C++ dfs状态的表示(五十三)【第十三篇】

因为我们是逐列放置的,所以列内是不会冲突的,对于行也很好处理,如果某行被占用了,只需要用一个数组标记即可。N 皇后问题是一个经典的问题,在一个 N×N 的棋盘上放置 N 个皇后,每行刚好放置一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。从第 0 列开始,我们依次给每一列放置一个皇后,对于一个确定的列,我们只需要去枚举放置的行即可,在保证放置合法的情况下,一直搜索下去。而这样的对角线上的位置的坐标的行减去列的值也是相同的,都是 −2。N 皇后问题,我们的搜索策略如下。

2024-02-12 13:02:30 408

原创 C++ dfs的状态表示(五十二)【第十二篇】

仔细观察可以发现,它找出的 66 种方案实际上是 1, 2, 3 的全排列,而 n 个数进行全排列时,方案数有 n!1,那么剩下 2,3,4,5 四个数;如果选择了 2,那么剩下 1,3,4,5 四个数,还可以选择 3....;我们用 s 表示选出来的数的和,cnt 表示选出来的数的个数。对于前面 k 个数的和的求法,我们除了可以用上面的 DFS 方法以后,还有一种搜索策略。6 种选择方案,但是它们本质上是一种 1 + 2 + 3,所以可以尝试去除重复的方案。5 个数 1,2,3,4,5,如果选择了。

2024-02-10 21:52:30 513

原创 C++ dfs 的状态表示(五十一)【第十一篇】

下图是这个搜索过程对应的 搜索树,搜索树上的每一个结点都是一个 状态,一个状态包含两个值 S 和 k也就是一个状态对应当前的数值总和,以及选的数的个数。前面用到的 DFS 算法都是比较容易想象出搜索过程的,接下来我们看一些不那么容易想象搜索过程的 DFS 过程,这些问题我们称为抽象形式的 DFS。对于每一个数,枚举选或者不选两种情况,我们可以用 DFS 思想来完成这样的枚举过程。S 值是否等于sum。在第二层,对第二个数做同样的处理,DFS 的过程中记录已经选取的数的个数,如果已经选取了 k 个数,判断。

2024-02-10 21:50:49 384

原创 C++ dfs搜索枚举(五十篇)【第十篇】

我们发现通过枚举每一个数选或者不选就可以把所有组合枚举出来了,此时,我们需要的仅仅是知道现在在看第几个,已经选了几个,这两个数就作为参数,假设我们目前考虑到了第x个,目前选了dep个,那么选这个数以后要去的状态就是(x + 1, dep + 1),不选这个数,要去的状态就是(x + 1, dep)。很明显,如果使用与之前相似的枚举手段,将会产生大量的重复。可以直接在之前的代码上修改,不过我们这里先教大家用另一种更直接的方法来枚举组合,我们改变枚举搜索的策略。今天我们接着学习搜索枚举。写成代码就是下面这样。

2024-02-08 00:07:47 371

原创 C++ dfs搜索枚举(四十九)【第九篇】

如果使用我们之前的搜索枚举方法,我们发现难以用参数标记原数组中数字的选取情况,那么我们就需要一个全局的布尔数组,帮助我们标记哪些数字已经被选入了排列。另一方面,由于我们使用了这样的全局标记数组,那么必然在搜索时使用到 回溯 技巧,在这个分支的搜索结束后,将标记数组还原。如果想要输出 n 个数字的 k 排列,我们可以在之前代码上进行一些较小的修改。若要输出 n 个数字全排列,在 dfs 数组中需要的参数需要包含已经选入的数字,在选取当前位数字后进行搜索后,要注意进行回溯。n 中找到长度为 k 的排列。

2024-02-07 23:30:11 367

原创 C++ dfs搜索枚举(四十八)【第八篇】

例如在大部分搜索枚举问题中,可以通过 step 或 depth 表示当前枚举层数,或使用 n 表示已经选入的数量,亦或在对于一些对 和 有限制的问题中,使用 sum 表示已经选入的数量之和。在搜索枚举的过程中,我们能够根据题目的一些性质,对求解的过程进行剪枝优化,这个我们以后也会学到。让我们看一道能够使用搜索枚举实现的题目:现有方程a[1]x[1]+a[2]x[2]+a[3]x[3]+...+a[n]x[n]=0 2≤n≤10,−5≤a[i]≤5,−2≤x[i]≤2,x[i]∈Z。

2024-02-05 23:27:10 435

原创 C++ dfs 与图有关的知识(四十七)【第七篇】

这样我们在找每一个与当前节点u相连的子节点v的时候,把到v去搜索得到的返回值加进sz[u]上,这样就把以u的每个子节点为根的子树的大小都加进来了,最后再给sz[u]加上 11(u节点本身),返回就可以了。1 是整棵树的根,那么以 2 为根的子树,可以拆成 2 (子树根),6,7,8(以 6 为根的子树),4(以 4 为根的子树),三部分,这三部分的点数加起来就是这棵子树的大小。树的深度:规定根结点是树的第一层,树根的孩子结点是树的第二层,以此类推,树的深度就是结点的最大层数。求解每棵子树的大小:自下而上。

2024-02-04 23:29:22 403

原创 C++ dfs 有关图的知识(四十六)【第七篇】

平常输入树的方式有很多,比如明确说明每个点的父节点,或者明确说明了一个点是另一个点的父节点,此时,我们只需要父节点向子节点连有向边就足够了,对于根节点,有可能会明确知道,如果不知道,那可以统计每个点是不是有父节点或者统计每个点的度数来找到根节点,此时fa这个参数也可以就不用了。记录父节点可以使用一个数组,不过如果之后我们不会再关心每个点的父节点是谁,只是在这次搜索才用,那就可以直接把父节点当作参数传进来。我们之前研究了图上的搜索,我们之前还学了树这种特殊的图,接下来我们就来研究一下在树上的搜索。

2024-02-03 23:28:51 412

原创 C++ dfs 有关图的知识(四十五)【第六篇】

那对于一张连通图,我们如何能够求出字典序最小的 DFS 序,首先肯定要从 1 号点开始,然后要求每一次走的都是当前能走的编号最小的点,因为字典序是一旦当前位置小了,不管后边怎么大,这个字典序都小,这就是一个贪心的思想。特殊地,当一直都是一样,直到某个字符串后边没有字符了,那就是没有字符的小,还有字符的大。那回顾之前学习的迷宫问题,如果约定往上走一步是'U',往下走一步是'D',往左走一步是'L',往右走一步是'R',一个从起点走到终点的方案就可以写成一个字符串,现在希望求解字典序最小的方案,如何去做?

2024-02-02 23:03:42 354

原创 C++ dfs 有关图的知识(四十四)【第五篇】

在连通图上遍历,我们总能得到一个访问的顺序,如果我们使用 DFS 进行搜索,得到的顺序就叫做 DFS 序,从刚才的图也可以看出来一个图的 DFS 序是不唯一的,而且根据一个 DFS 序也没法还原出整张图的样子。比如最简单的迷宫问题,状态就是目前所在的位置,那就可以画一个图,点就是每个位置,从这个位置可能可以往周围四个方向走,走到另一个位置,也就是到达另一种状态,如果可以从一个状态走到另一个状态,就给这两个点连上边。这样就画出了一个图,执行搜索的时候也就是在这个图上走,回溯的时候就是退回上一个点。

2024-02-01 21:52:50 342

原创 C++ 图 的延展 哈夫曼树(四十三)【第九篇】

现在要构造一棵二叉树,树上每条边的权值都是 1,并满足所有 叶子结点权值 和 它到根的 距离的 积 之和sum 最小。根据上图的右侧图中可以发现每条边的贡献实际上是该边连接的“下侧”结点的权值,而对于一个非叶子结点的权值是等于它的两个儿子结点的权值和。每次选择两棵权值最小的子树,新建一个结点向两棵子树的根结点连边,合成一棵新的子树,新子树的权值为两棵子树的权值和;现在我们的目的就是让每个结点的权值(边的贡献)尽可能小,因为最初给的均为叶子结点的权值,所以从叶子结点开始构造。边的数量有 2n[0]−1。

2024-01-31 22:36:39 314

原创 C++ 图 的延展 二叉树(四十二)【第八篇】

树是一种特殊的图,所以我们可以使用邻接表存储树。因为二叉树上每个结点最多有两棵子树,并且是区分左右子树,所以我们可以在结构体内标记当前结点是左子树还是右子树。下面我们通过两个例子来看一下,二叉树在数组中是怎样存放的,其中根节点储存在 1 号位置。i=1,则该结点是二叉树的根,无双亲,否则,编号为。若2×i+1>n,则该结点无右孩子结点,否则,编号为。若 2×i>n,则该结点无左孩子,否则,编号为。2×i+1 的结点为其右孩子结点。2×i 的结点为其左孩子结点。i/2 的结点为其双亲结点。

2024-01-31 22:36:08 321

原创 C++ 图 的延展 二叉树(四十一)【第七篇】

今天我们来讲一下树的一些计算,先来细讲一下吧!关于 二叉树计算 的相关内容有很多,我们先回顾一下二叉树的特性:二叉树上每个结点 最多有两个 孩子结点。二叉树的第 i 层上最多有2的i次方−1 个结点。i≥1)如果二叉树深度为k,那么整棵二叉树最多有2k−1 个结点。k≥1)根据它的特性我们能延伸出来很多问题:具有n 个结点的二叉树深度最深为多少?具有 n 个结点的二叉树深度最浅为多少?

2024-01-31 22:34:42 322

原创 C++ 图 的延展 二叉树(四十)【第六篇】

现阶段我们只需要掌握基本的二叉树结点表示即可,关于二叉树的更多细节操作比较复杂,后面的阶段我们会再讲。i=1,则该结点是二叉树的根,无双亲,否则,编号为 i/2 的结点为其双亲结点。从二叉树的结构来看,除根结点以外的所有结点都跟 上一层 结点有直接相连的关系。我们前面学会了二叉树的存储,下面我们来看看二叉树如何访问到每个结点的吧!访问 �x 的左儿子,并且继续向下递归访问,如果没有则直接进行下一步。访问 �x 的右儿子,并且继续向下递归访问,如果没有则直接进行下一步。

2024-01-31 00:29:51 882

原创 C++ 图 的延展 二叉树(三十九)【第五篇】

生活中,树很常见,有各种各样的树。从上面几幅图来看,树的构成几乎是一样的:树根、躯干、树叶...在程序设计中也有这么一种 特殊 的结构:树。程序中的树跟生活中的树不太一样。那么程序中的树是什么样呢?上图中蓝色部分是程序中树的图示,不难发现,它跟实际的树也有一些 相似之处:画出的绿色部分,像松树的伞帽形状用带箭头的线连接所有蓝色圆圈,像实际树的树枝、躯干一样。所以,程序中的树其实是 模仿 生活中的树建立的 特殊程序结构,但它跟实际的树也有一些不同的地方...

2024-01-31 00:29:19 774

原创 C++ 图(三十八)【第四篇】

当两个人是朋友时,有可能是很好的朋友,也有可能是一般的朋友,还有可能是不熟悉的朋友。我们用一个数值来表示两个人之间的朋友关系强弱,两个人的朋友关系越强,对应的值就越大。实际上,我们前面学习的图是一种特殊带权图,只不过图中所有边的权值只有。用邻接表存储带权图和之前的实现方式有区别,我们需要用一个结构体来记录一条边连接的点和这条边的边权,然后用一个vector来存储若干个结构体,接下来,我们先学习一个概念,带有权值的图,其实就是每条边上有一个自己独立的值了,接下来我们来进行一个深入的了解吧。

2024-01-31 00:28:09 316

原创 C++ 图(三十七)【第三篇】

上期说到...:说实话:如果邻接矩阵是说两个点有没有连一条边,那邻接表就是说这个点和谁连了一条边,看一个图:这就是邻接表,但是我们该使用什么数据呢?没错就是第六讲的:动态数组:我们此时就可以使用vector来构建邻接表了。

2024-01-30 00:19:13 344

原创 C++ 图(三十六)【第二篇】

那我们接着说,话说我们讲了这么多,我们该如何储存图呢???有两种:邻接矩阵邻接表那我们就学习一下吧!在之前的课程中,我们学过数组下标的更多应用,例如我们可以使用数组标记某个数是否出现过。具体实现为:我们回到图中,在图中我们可以明确的知道某个顶点u 向其他顶点 v 的连接情况。那么对于顶点u 我们可以使用一维数组 vis[ ]标记它可以向哪些顶点连边。如果存在 u→v 的边,我们使用 vis[v]=1 进行标记,反为 vis[v]=0。下面是顶点。

2024-01-30 00:17:33 884

原创 C++ 图(三十五)【第一篇】

在顶点集合所包含的若干个顶点之间,可能存在着某种两两关系——如果某两个点之间的确存在这样的关系的话,我们就在这两个点之间连边,这样就得到了边集的一个成员,也就是一条边。顶点的出度是指以顶点为起点的有向边数量。其点集V(G′)={1,2,3,5,6},边集为 E(G′)={<1,2>,<2,3>,<2,6>,<6,5>,<1,5>}。V(G)={1,2,3,5,6},边集为 E(G)={(1,2),(2,3),(1,5),(2,6),(5,6)}。在无向图中,边连接的两个顶点是无序的,这些边被称为 无向边。

2024-01-30 00:16:56 929

原创 C++ dfs深度优先搜索(三十四)【第四篇】

l比如这个图,如果*是草地,.是空地,如果认为有公共边的格子是相互连通的(即一个格子和它周围上、下、左、右四个格子连通),那么图中草地一共有 2 个连通块,一个大小为 6 ,一个大小为 2。求连通块个数可以依次从每一个有效的没被访问过的点出发,往四周搜索直到出界或者遇到空地,一共出发了多少次就是有多少连通块,每一次可以统计这一次走了多少个格子,也就是这个连通块的大小。接下来我们看第二个,我们每次需要把ans更新为最大的值,所以可以使用max函数,但不要忘了在max前,我还是需要进行dfs与初始化的。

2024-01-28 23:30:41 357

原创 C++ dfs深度优先搜索(三十三)【第三篇】

这里少了个什么判断?所以我们加上:​​​​​​​。你知道该如何进行填写吗?不要忘了让方案书增加。

2024-01-28 23:28:26 353

原创 C++ dfs深度优先搜索(三十二)【第二篇】

当然,dfs的用途肯定不止这一点,我们还可以使用dfs来输出迷宫路径。3.在dfs函数中的return false;接下来我们输出路径的任务就大功告成了!现在它只能进行判断是否能出去。接下来我们稍加改动...原创 我家小白小花儿。

2024-01-28 23:26:03 349

原创 C++ 搜索算法(dfs深度优先搜索)(三十一)

这张图是个迷宫,你需要判断能否从起点(S)到终点(T),其中'.'为平地,'*'为墙壁。如果能走出迷宫输出yes,否则输出no,这时就可以使用dfs深度优先搜索了。还记得我们之前讲过的递归吗?分别可以使用函数,判断是否为*,以及bool数组来进行判断。到达终点(T)return true。深度优先搜索为什么是dfs呢?右:三个条件符合,往这个方向走。所以是深度优先搜索(dfs)s就是search(搜索)f就是first(优先)d就是deep(深度)

2024-01-28 23:24:39 374

原创 C++空间复杂度(三十)

算法的空间复杂度是指运行该算法所占用的存储空间大小,记为S(n)。和时间复杂度类似,通常也是取它的渐进空间复杂度,用一个直观的函数来表示。通过空间复杂度,我们可以预估出算法运行所需的存储空间,包括指令空间、数据空间、动态申请的内存空间等。答:这时就可以计算空间复杂度了,空间复杂度就是你在这个程序中,占了多少的内存。每日一个小问题:一个算法的优劣该是用什么来判断呢?S(n)=n+n2,则空间复杂度为 O(n2)。在使用函数递归的时候,别忘记递归消耗的栈空间。在此之前我们先来学习一下空间复杂度吧!

2024-01-27 00:58:42 348

原创 C++时间复杂度(二十九)

算法的复杂度是评估算法性能优劣一个重要的指标,可以帮助信息学竞赛选手估算出算法在执行之后所需要的时间和空间,所以分析算法的复杂度几乎成了每个 OIer 必须掌握的能力。在计算算法的运行时间时,对于足够大的输入规模来说,我们关心的是运行时间的增长量级,也就是研究算法的渐进效率。可以发现,O表示渐进上界,Ω表示渐进下界,而上下界相等时,就能用 Θ表示了。时间频度是指算法中语句的执行次数,用 T(n)来表示,n 为问题的规模。f(n) 替代 T(n),记为 T(n)=O(f(n)),称为算法的渐进时间复杂度。

2024-01-27 00:57:48 346

原创 C++查找算法(二十八)

它的参数和binary_search类似,也是三个,首位置,尾位置和要查找的元素,不过返回值是找到的相应元素的位置。注意,在vector中要用.begin()和.end(),写成binary_search(a.begin(), a.end(), x)或者binary_search(a.begin() + l, a.begin() + r, x)。比如给一个数组,找到其中等于 x 的数,大于 x 的数,小于 x 的数,大于等于 x 并且小于等于 y 的数的数量、位置等,都是查找算法可以解决的问题。

2024-01-25 22:10:13 941

原创 C++贪心算法(二十七)

我们先来看一个简单的例子:你现在有面值为 20 元、10 元、5 元、1 元的纸币足够张,现在想用最少张数的纸币支付 58 元。最差的方法是支付 58 张 1 元的纸币,但我相信你肯定不会这么做。你会按下面的步骤想:20 元纸币用 2 张,还需凑 18 元。10 元纸币用 1 张,还需凑 8 元。5 元纸币用 1 张,还需凑 3 元。1 元纸币用 3 张,刚好凑出了 58 元,一共用了 7 张纸币。即优先用大面值的纸币,能用多少就用多少,然后再一步步考虑小面值,这其实就是一种贪心的思想。

2024-01-25 22:09:34 358

原创 C++枚举算法(二十六)

枚举 就是根据提出的问题,一一列出该问题的所有可能的解,并在逐一列出的过程中,检验每个可能解是否是问题的真正解,如果是就采纳这个解,如果不是就继续判断下一个。如果一个三位数,它的每个位上的数字的三次幂之和等于它本身,那么我们就称这个数字为一个水仙花数。某君说:“我的年龄是个两位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”检验条件也是确定的,只要把枚举的年龄的个位与十位交换,如果发现比原数字刚好小27,那么它就是真正的解。能够用枚举法解决的题目往往是最简单的一类题目。

2024-01-25 22:08:59 623

原创 C++随堂小测(二十五练习)

输入一个数组,输出它排序后的数据,请你用7种排序分别写出(sort, stable_sort, insert_sort, choose_sort, bubble_sort, merge_sort, quick_sort)。输入一个整数n,计算它的阶乘。

2024-01-24 22:26:55 310

原创 C++近期知识总结与小测(二十五)

map往往可以当作特殊的数组来使用,在数组开不下,或者数组下标不是整数的时候使用map就很方便,比如统计字符串的出现个数,统计int范围内的数的出现次数等等。5.pairunordred_map往往可以当作特殊的数组来使用,在数组开不下,或者数组下标不是整数的时候使用map就很方便,比如统计字符串的出现个数,统计int范围内的数的出现次数等等。下面是我们学到的unordred_map的常用函数9.自定义函数先看看自定义代码怎么创建:这里说的很详细就不说了。

2024-01-24 22:26:23 366

原创 C++排序算法(二十四)[第三篇]{提高}

快速排序是目前应用最广泛的排序算法之一,它的基本思想与归并排序类似,也是基于分治的。每次从待排序区间选取一个元素(我们在后面的课程中都是选取第一个)作为基准,所有比基准小的元素都在基准的左边,而所有比基准大的元素都在基准的右边。每一轮找到右边第一个小于基准的位置,和左边第一个大于基准的位置,把这两个位置的数交换。归并排序的基本思想是分治,每次把待排序的区间分成两半,递归地处理。于基准,区间内的元素都大于等于基准。执行归并操作时,先把两个有序的区间合并到一个新数组b中,最后再复制回原数组里。

2024-01-24 22:25:10 358

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除