自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题 二叉树遍历

我们可以在中序遍历中将该根节点的所有左子节点存起来,所有的右子节点也存起来。我们在对层次遍历进行处理,将所有左子节点进行存储,因为刚进行标记过,因此很容易找到左子节点,同时将右子节点也进行存储。这样我们将层次遍历和中序遍历两者的左子节点和右子节点都进行了分别存储。左子和右子又都是一棵二叉树,则我们进行递归调用,分别构建左子树,右子树,并返回根节点的地址。// 将找到的根节点的左(右)子节点插入到sm_left(sm_right)// 在层次遍历中将左子节点和右子节点进行分别存储。// 将左子节点进行标记。

2023-04-04 19:38:53 88

原创 每日一题 级数求和

对于这个题,设一个sn=0,用以存放级数的和,再设一个从i=2开始的循环,令sn等于sn+(1/i-1),每次判断sn是否大于k,若大于,n=i-1,输出n.已知:Sn= 1+1/2+1/3+...+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。现给出一个整数K(1

2023-03-31 19:57:11 181

原创 每日一题 最大公倍数和最小公倍数

/还一个未知数q,他们俩的最大公约数和最小公倍数就是题目的n和m;//两重循环只有80分,于是乎利用已知一个数p(利用一重循环遍历,int pd(int x,int y){//求最大公约数的(辗转相除法)//所以q=n * m / q;

2023-03-30 20:11:00 89

原创 【无标题】

用两个循环枚举边长,若边长相等则为正方形,否则就为长方形,再分别计算个数即可。统计每一种可能的正方形和长方形,计算行和列最多能容纳多少个这种长方形或者正方形,两者的乘积便是此种形状在棋盘中的个数,i==j时为正方形,反之 为长方形。正方形的个数有8个,即边长为1的正方形有6个,边长为2的正方形有2个。求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。对于每组输入数据,出该棋盘中包含的正方形个数和长方形个数。2*1的长方形有4个;1*2的长方形有3个;3*1的长方形有2个;3*2的长方形有1个。

2023-03-30 20:08:36 71

原创 每日一题 比赛安排

n【2】先定下第i以及第j个队员(通过if(a[i][j]==1)来判定),然后暂时(注意这里是暂时排出因为下一天的场次比赛还需要还需要用)排出掉第i行,第j行,第i列,第j列(目的是为了安排不同的队员,不重复进行比赛),排除的方法就是将a[i][j]=3;i+=2)//第i和第j个队员的标号都存储在ans数组中,奇数存储第i个队员,偶数是第j。if(a[i][j]==3)//将上一天中的标记为暂时被排除的队员标号(索引位置)恢复。a[i][j]=1;if(a[i][j]==1) //可以被安排,之后。

2023-03-28 19:35:24 59

原创 每日一题 回文平方

因为我们寻找的是一至三百的平方的回文数,所以首先将一和三百的平方,也就是90000化为b进制数,由1和90000的b进制数组成了我们的寻找范围,接下来做一个判断回文数的循环,查找符合条件的回文数就行。现在给定你一个整数 �B,请你判断 11∼300300 之间的所有整数中,有哪些整数的。第一个表示满足平方值转化为 �B 进制后是回文数字那个数,第二个数表示第一个数的平方。对于大于 99 的数字,用 �A表示 1010,用 �B 表示 1111,以此类推。转化为 �B 进制后,其 �B 进制表示是回文数字。

2023-03-27 19:22:19 25

原创 每日一题 蛇型矩阵

首先创建一个n*m的矩阵用以存放这个蛇形矩阵,那么,如何来存放这个矩阵呢,我们可以从样例中清楚的看出,最先存放的是第一行的m个从一开始的数,后面就需要从m列的第一行向n行存放m列中的n行数据,再就是从n行第m列至第一列存放数据,最后从第一列的n行向第一行存放数据,这里的数据可以设一个变量=1,每次操作都要加一,执行以上操作直至填满这个n*m矩阵。// 若 sum == n*m,则全部已经填完。// 再进行从下往上的遍历。// 再进行从左往右的遍历。// 先进行横向的填写。// 进行纵向的遍历。

2023-03-24 19:45:10 26

原创 每日一提 数字三角形

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。

2023-03-22 19:57:39 26

原创 每日一题 拼写正确

首先将给出的数据加起来,然后将相加得到的数除以十得到十位上的数,再将相加所得的数对十除余得到个位上的数,若相加所得为三位数,就对百除得到百位上的数,最后输出各位数的英文形式。可能会出现前导0,比如:00123,对应的整数是123。共一行,用英语输出总和的每个数字,单词之间用空格隔开。的所有数字的总和,并以英语输出总和的每个数字。共一行,包含一个整数。

2023-03-22 15:24:01 27

原创 数论基础裴蜀定理

裴蜀定理(或贝祖定理,Bézout's identity)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且GCD(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。\n\n推论:\n\n它的一个重要推论是:a,b互质的充要条件是存在整数x,y使ax+by=1.#include <iostream>#include <cstr

2023-02-22 07:58:02 155

原创 数论基础公约数

约数和公约数 一个数的所有约数试除法枚举到sqrt(n) ,原理同判断质数。vector<int> div(int k){ vector<int>ans; for(int j=1;j<=k/j;j++){ if(k%j==0){ ans.push_back(j); if(j!=k/j) ans.push_back(k/j);

2023-02-22 07:55:17 37

原创 数论基础判断素数

判断素数 和素数筛(埃筛和欧拉筛)素数判断· 根据素数的定义,只含有1和本身的因数的数被称为素数,由此定义枚举小于这个数的所有数,如果出现能够整除的,说明这个数不是质数。注意:此处只需要枚举到sqrt(k)。因为 若 i | k,则 k/i | k所以i如果不是因数,那么k/i也不是,最多到sqrt(k),超过这个范围就没有意义了。O(sqrt(n))此处两数相乘采用逆元,可以防止爆intint is_prime(int k) {//判断k是否是质数 int ok

2023-02-22 07:50:46 94

原创 数论基础分解质因数

一.分解质因数和算术基本定理\n ① 惟一分解定理 (算术基本定理)可表述为:任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=,这里P1\u003CP2\u003CP3......\u003CPn均为质数,其中指数ai是正整数。这样的分解称为N的标准分解式。\n\n ②质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数

2023-02-22 07:46:37 330

原创 弗洛伊德算法

弗洛伊德算法也是一种寻找最短路径的算法,算法核心思路如下:\n\n路径矩阵\n通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。 [3] \n\n从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的

2023-02-14 02:30:02 78

原创 深度优先搜索算法

1.深度优先搜索算法\n\n 深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。\n\n2.实现原理\n\n

2023-02-14 02:26:36 114

原创 离开中山路

记录开始点和结束点的位置开始点设为1,不能走回来结束点不能设为1,不然走不到搜索一遍就没了*/#include<cstdio>#include<cstring>int fx[4]={1,0,-1,0};int fy[4]={0,1,0,-1};char ma[1001][1001];//注意注意!!一点要用char,输入图的时候没有空格,int输入不了 struct node{int x,y,c;}q[1100000];//(x,y)坐标,c是步数 int n; void bfs

2023-02-09 20:51:16 159

原创 全排列问题

1.创建一个数组,下标是二的n次方的位置里存的是n;1<<几就是2的几次方。(举个例子:下标是32的位置里存的是5,下标是1024的位置存的是10)2.在dfs里加上一个形参s,是状态压缩的二进制数,1代表当前位置可以搜,反之是0。3.改一下递归部分的for(创建一个临时变量ss,替代当前一层的s;条件是s不为0;去掉ss的最后一位;)4.因为懒,就创建了一个临时变量。普及一下:一个数a求它二进制数的最右面一位1,就这么求:a&(-a)5.因为状态压缩的每一位的数值就是2的(那一位)位数

2023-02-09 20:47:31 43

原创 数据结构图的基本应用

图的连通性问题无向图的连通分量图是否连通的判断:是否仅调用一次搜索过程。图的连通分量:每次调用得到的顶点序列恰为各连通分量的顶点集。调用搜索过程的次数就是连通分量的个数。图中两个顶点之间的简单路径顶点u到顶点v的简单路径:路径中的顶点均不相同。[算法思想] 有无:从顶点u开始,进行深度(或广度)优先搜索,如果能搜索到顶点v,则表明从顶点u到顶点v有一条路径。是否是简单路径:由于在搜索过程中每个顶点只访问一次,所以这条路径必定是一条简单路径。记录:在搜索过程中,把搜索的线路

2023-02-09 20:44:36 68

原创 数据结构集合

集合是不同对象(称为成员)的无序聚集。集合是成员彼此之间相关,但每个成员在集合中只出现一次的无序聚集。集合的两个特点:成员是无序的每个成员都只在集合中出现一次集合的应用:数据关联:用来确定数据集合之间的关系,例如,求两个集合之间的交集,集合覆盖:一种优化求解问题。例如从一大堆选手中挑选人员来组成一支队伍,每名队员都具有某种特定的技能的组合。我们可以采用集合覆盖的抽象方法来组成一只拥有特定技能组合的最小团队。也就是说,对于团队这个集合所需要的任意一种技能,队伍中应该至少有一名队员拥

2023-02-09 20:40:25 43

原创 线性表C++

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。定义线性表(linear list)是数据结构的一种,一个线性表是n

2023-02-09 20:35:05 38

原创 二叉树与遍历

一、二叉树的定义二叉树(Binary Tree) 是由n个结点构成的有限集(n≥0),n=0时为空树,n>0时为非空树。对于非空树 T T T:有且仅有一个根结点;除根结点外的其余结点又可分为两个不相交的子集 T L T_L TL​和 T R T_R TR​,分别称为 T T T的左子树和右子树,且 T L T_L TL​和 T R T_R TR​本身又都是二叉树。很明显该定义属于递归定义,所以有关二叉树的操作使用递归往往更容易理解和实现。从定义也可以看出二叉树与一般树

2023-02-09 20:31:12 49

原创 C++选择排序

如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换,然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换,.......直到所有元素都排序好。#include <iostream>using namespace std;void selectSort(int *a,int len){for(int i=0;i<len-1;i++) //i控制排序的轮数

2023-02-05 03:08:42 85 1

原创 C++快速排序

C++语言中快速排序是极为快速的一种算法,掌握它是极有必要的。#include<iostream>using namespace std;const int N=1e6 + 10;void quicksort(int q[],int l,int r){ if(l>=r) return ; int i=l-1,j=r+1; int x=q[l+r>>1]; while (i<j) { do i++; wh

2023-02-05 03:06:14 23

原创 二分法插入排序

二分法插入排序沿用了插入排序的思路,而且由于[R0,Ri-1]是有序序列,在寻找Ri的插入位置时,可以采用二分查找法搜索有序区间中比第一个Ri小的元素,这样就减少了比较次数,提高了插入排序算法的性能。\n\n以长度为6的序列 {6,3,5,4,1,2} 的二分法插入排序过程做示范:\n第一趟排序:[3 6] 5 4 1 2 (3插入6之前)\n第二趟排序:[3 5 6] 4 1 2 (5插入6之前)\n第三趟排序:[3 4 5 6] 1 2 (4插入5之前)\n第四趟排序:[1 3 4 5 6] 2 (1插

2023-02-05 03:01:55 224

原创 时空间复杂度

看程序时,我们只需要了解时间复杂度可以大致地通过一个算法的运算的次数来描述程序运行的效率,常常用大写字母O来表示。在表示时间复杂度的时候,只保留数量级最大的一项,并忽略系数。 顾名思义,用来衡量内存的占有量。吃了计算复杂度,我们有时候也可以直接算出来运行程序需要占用多少内存。 for(int i = 1; i <= n; i++0){ cin >> a >> b >> g >> k; for(int d

2023-02-05 02:55:44 34

空空如也

空空如也

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

TA关注的人

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