![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Notes on Algorithm
文章平均质量分 50
Zeal Young
一直默默生长的知识控
展开
-
算法记录:用二维数组实现“杨辉三角”的输出
题目按要求输入如下格式的杨辉三角11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1最多输出10层实现的方法有很多,我想到的算是比较简单的一种,只需要一个数组加循环语句就行。嗯,这是算法学习初期的水平吧~#include <cstdio>int main(){ int n; scanf...原创 2019-04-07 17:00:23 · 1690 阅读 · 1 评论 -
算法笔记:使用getchar()读入字符串(包括空格)
要点scanf()是无法读入一串有空格的字符串的。所以,除了考虑整串读入,还可以采取一个个读入的方式,最后以换行符终止。具体实现如下:char s[MAXN], a;int len = 0;while (true) { s[len++] = getchar();//len = 0, then len + 1 if (s[len - 1] == '\n') bre...原创 2019-06-08 16:29:33 · 13589 阅读 · 1 评论 -
C++生成最大的随机数
思想一般情况下,使用随机种子rand()来生成,会受到RAND_MAX的限制,超过RAND_MAX的数字就根本无法生成。所以,这时候考虑并不直接随机生成数,而是生成“随机”即可,这个随机可以是一个比例,比如rand()/RAND_MAX,比例是不受范围限制的,随意就可以用来与更大的数相乘,得到更大的随机数。使用注意如果在C++中使用随机种子,需要#include 和#include ...原创 2019-07-08 13:18:45 · 3098 阅读 · 0 评论 -
C++:如果变量不赋初始值……
结果会是随机的吗?还是说和具体的机器有关系?比如:#include <cstdio>int main(){ int ans; printf("%d", ans); return 0;}我得到的结果是:47,为什么?转成二进制看看:101111,好像有那么一点意思10 1111是默认初始值吗?或许这一点值得探究一下?(尝试在其他机器,...原创 2019-07-08 16:58:53 · 3263 阅读 · 0 评论 -
算法思路:高精度乘法(大整数与int相乘)
核心思路这里选择相对简单的int型整数和大整数相乘,来考虑其算法的思路:按照小学算术的知识,两个数相乘,可以拆开看成一个数固定,另一个数从个位开始,依次和这个数相乘;然后没左移一位,相应的结果也左移一位,最后相加。(其实硬件实现加法,也是基于这个最基本的原理)所以,在算法的实现上就可以这么来考虑:比如:711×21那么个位数1 ×711 = 711,用10取模得到1,就是最后的...原创 2019-07-12 18:04:41 · 1505 阅读 · 0 评论 -
插入排序:先挖空,再填补
算法的精髓所谓插入,正如其名,想要插入,得先有地方插。所以这就需要先挖一个空。插入排序,从左往右,依次排序完成,所以从第一位置开始,先取出备份,然后再将这个位置之前的进行排序,第一位置只有一个数字,所以是排好的,无须操作。从第二个位置开始,先取出第二个位置元素进行备份,然后从第二位置往前,看前面的数字是否大于一开始取出备份的元素,大的话就往前挪,即往一开始的空位挪。最后还会有一个空位,这个...原创 2019-07-04 14:45:09 · 181 阅读 · 0 评论 -
归并排序:2,4,6 ,8……
算法精髓简单说,就是一分为二,二分为四……但是,这里思考的,是尽可能不使用递归。所以换一种思维来考虑,原来的二分无非就是,第一次,两个两个处理,第二次,四个四个处理,……然后依次类推,到最后一步,就只剩下两个有序队列,然后进行归并即可。关于归并的插入,二分法时需要来考虑,但是如果采用从左往右,不用递归的话,直接使用sort函数即可。关于有序队列的拼接可以考虑使用两个指针分别指向需要...原创 2019-07-04 14:55:48 · 327 阅读 · 0 评论 -
算法:理解扩展欧几里得算法
这个算法还是有点意思的,需要一些思考量和理解。如何理解?欧几里得算法没扩展之前,计算的两个数的最大公约数,比如计算144和24的最大公约数,计算的过程如下:最开始:144 24第一次:24 144 % 24 即 24 0发现直接整数了,说明24就是144的公约数,所以计算结果就是:24如果用a,b来表示,变为一般形式的话:给定两个数(a, b),现在想计算两者的最大公约数,那么...原创 2019-07-14 14:58:56 · 663 阅读 · 0 评论 -
代码实现:进制转换
原理比如12转成2进制,那么第一次模2后,得到应该是最左边位置的数,然后除2,之后再模2,得到的是左边第2个位置的数。如下:12 % 2 = 012 / 2 = 66 % 2 = 06 / 2 = 33 % 2 = 13 / 2 = 1 (向下取整)1 % 2 = 11 / 2 = 0至此结束。如果用一个数组来记录,取模的值,那么应该是:0 0 1 1 0这是逆序的...原创 2019-07-10 19:09:24 · 795 阅读 · 0 评论 -
Quadratic Probing:二次方探查法
核心思想当散列发生冲突时,将原来的值分别……如此进行。如果题目只考虑正向,那么减的就不要考虑。冲突处理公式原来的值改变后,模上表长,如果仍然冲突,继续增加,直到增加的值等于表长...原创 2019-07-10 19:27:17 · 1622 阅读 · 0 评论 -
关于写完函数不调用的问题……
我只能说:这可能最不容易发现的问题了。我很好奇,为什么会出现这种情况呢?原因想了一下,可能有这么一些:并不是真的知道为什么要写这个函数,即,不是自己构思想,反倒有一个刷题后的惯性思维。 main函数,最后写没问题,但main函数是程序唯一的入口,这一点没有意识到,自然就容易忘。 初学者最容易犯这种错误,不如多警醒自己!!!...原创 2019-07-10 22:05:39 · 485 阅读 · 0 评论 -
算法:使用递归实现“深度优先搜索”的理解
“深度”的理解深度优先的关键,在于深度,一扎到底,有一种“不撞南墙,死都不回头”的勇猛。理解深度优先搜索的关键,也就在深度上。一般理解深度优先搜索会用迷宫举例子,其实这个例子本身就很形象具体了,可以很好理解,但是如果不抓住理解的本质,很容易就会犯难。分叉、分叉、分叉深度优先的搜索选择,在于执迷不悟地每次只选同一方向的分叉,直到撞死在南墙上,才想到要回到上一个分叉,另作选择。所以,...原创 2019-07-23 16:11:37 · 2436 阅读 · 0 评论 -
中缀表达式与后缀表达式的转换
理解的关键从最简单的例子出发:1 + 2 ×3 / 4转换成后缀表达式:1 2 3 × 4 / +关键是要理解:后缀表达式是借用堆栈的后入先出来实现运算的,即:上述的表达式可以以队列形式写出,然后借用堆栈进行计算:如果是操作数,压栈,如果是操作符,一次性弹出两个,分别是操作数2和操作数1在理解这个原因的基础上,再看,中缀和后缀之间怎么转换关键是要分开即操作数和操作符分开...原创 2019-07-17 21:05:29 · 214 阅读 · 0 评论 -
如何构建完全二叉排序树?
二叉排序树简明说,左子树的值都比父结点的小;右子树的值都比父结点的大。完全二叉树简明说,按照一个父结点两个左右孩子,从第一层开始,从左往右,没有孩子是空缺的树,就是完全二叉树。理解完全二叉树关系如果把二叉树的根结点视为1,那么它的左孩子就是2 × 1,右孩子就是2 × 1 + 1,以此类推都成立;所以,判断是否叶子结点,可以用结点自身的序号,与所有结束数来比较,该结点没有左...原创 2019-07-30 12:51:36 · 2539 阅读 · 0 评论 -
算法笔记:关于“背包问题”的理解
这是一种思想……理解了会很畅快,但理不清就会极其堵塞难受。思想其本质两种背包问题,一种一件只能选一次;一种一件可以随意选,直到满足条件。其实两者本质差别在于:是继承?还是跳过?一个只能选一次的,需要逆向思考,即从大到小进行满足,比如说,背包容量9,现在有四种类型的物品:1 3 5 9;可以选的组合有1 3 5或着单独的9。如果正向思考,那么之前的会影响之后的,*而要求一类只能...原创 2019-08-10 10:29:09 · 609 阅读 · 0 评论 -
算法笔记:map内元素访问(迭代器方法)
提要暂时还没有弄懂具体是怎么实现的,算是照葫芦画瓢,先感性地认识。实现中用到的操作,PTA 1095://use iterator map<string, int>::iterator it; for (it = parkTime.begin(); it != parkTime.end(); it++) { if (it->secon...原创 2019-06-02 20:43:16 · 2218 阅读 · 0 评论 -
算法笔记:map()映射的简单应用
用字符串查找数值一般的数组,只能通过数字查找数字,如果这个数字一旦很大,那么实现起来就有问题。并且想要通过字符串来作为标记进行查找,更是不可能。所以,这就需要映射。其实,本质上讲,数组就是数字到数字的映射。就像理解y = f(x)一样。数组的y和x都是数值,也就是int型,而map函数却可以让y变成更大的数组,比如100个1,或者是字符串。具体形式如下:#include ...原创 2019-06-02 18:56:18 · 743 阅读 · 0 评论 -
算法笔记:使用memset初始化数组
用法void* memset ( void* ptr, int value, size_t num );括号内填入三个参数:1、需要填充内存块的位置(*ptr);2、需要填充的内容(value),3、需要填充的大小(size)/* memset example */#include <cstdio>#include <cstring> //use me...原创 2019-06-01 16:04:46 · 471 阅读 · 0 评论 -
算法记录:直接比较字符的数值大小
### 题目类似于从键盘上输入3个字符串,求出其中最大者。输入输入3行,每行均为一个字符串。输出一行,输入三个字符串中最大者。### 思考与纠结点字符在计算机中是以ASCII码存在的,所以肯定有数值的大小关系,所以尝试直接进行加和,**但是,发现出问题了!!!**如下:#include <cstdio>#include <cstring&g...原创 2019-04-07 19:29:10 · 1563 阅读 · 0 评论 -
算法记录:关于scanf输入疏漏导致的错误(附一个结构体的例题)
明确一点,用scanf进行输入,一定要明确输入到哪里,也就是告诉scanf地址的位置,所以就需要有取地址符&。而对于数组名而言,数组名本身就是地址,所以不需要&。但是如果是数组的某一项,那就必须要有&了!否者程序会死在那里直到自动退出。这是很基本很基本的操作,但是大意失荆州啊!一道例题题目描述设有若干个人员的数据,其中包含学生和教师。学生的数据中...原创 2019-04-12 14:23:40 · 358 阅读 · 0 评论 -
算法笔记:(黑盒测似)关于a+b的几种输入输出形式
题目描述你的任务是计算a+b。这是为了acm初学者专门设计的题目。你肯定发现还有其他题目跟这道题的标题类似,这些问题也都是专门为初学者提供的。输入输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。输出对于输入的每对a和b,你需要依次输出a、b的和。如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。样例输入1 510 20样例输出630代...原创 2019-04-12 16:27:26 · 618 阅读 · 0 评论 -
代码修炼:编程中疏漏错误(实时更新)
前言此文为记录在代码修炼过程中遇到的各种匪夷所思、难以置信的小错误、小疏漏。代码能力是需要一点点修炼和积累出来的,而错误一定会有。所以一个好方法是:遇到了,就随手记下来,实在过意不去了,脑门拍一拍哈?正文时间戳2019年7月10日等号与赋值!!今天已经不止三次因为这个而错误了!if (hashTable[M] == 0) { hashTabl...原创 2019-04-12 19:45:57 · 298 阅读 · 0 评论 -
PTA B1016 “部分A+B” 通过使用字符串(字符数组)实现
题目如下正整数A的“DA(为 1 位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A=3862767,DA=6,则A的“6 部分”PA是 66,因为A中有 2 个 6。现给定A、DA、B、DB,请编写程序计算PA+PB。输入格式:输入在一行中依次给出A、DA、B、DB,中...原创 2019-04-12 20:47:55 · 242 阅读 · 0 评论 -
PTA A1042 Shuffling Machine(洗牌机器之妙不可言的输出)
题目内容如下:Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate...原创 2019-04-21 13:16:53 · 287 阅读 · 1 评论 -
算法笔记:PTA A1002 多项式相加
题目1002A+B for Polynomials(25分)This time, you are supposed to findA+BwhereAandBare two polynomials.Input Specification:Each input file contains one test case. Each case occupie...原创 2019-04-21 16:26:14 · 488 阅读 · 0 评论 -
PTA A1031. Hello World for U(使用fgets注意换行符的读入)
题目描述如下:1031Hello World for U(20point(s))Given any string ofN(≥5) characters, you are asked to form the characters into the shape ofU. For example,helloworldcan be printed as:h de ll...原创 2019-04-28 11:13:30 · 287 阅读 · 0 评论 -
PTA 1027 Colors in Mars(读懂题目意思很重要!!)
题目描述如下:1027Colors in Mars(20point(s))People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the ...原创 2019-04-28 15:06:51 · 290 阅读 · 0 评论 -
PTA1031:查验身份证。这个挺有趣,记录一下~
题目描述如下:1031查验身份证(15point(s))一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8...原创 2019-04-28 16:14:31 · 828 阅读 · 0 评论 -
算法笔记:由二叉树思考“m叉树的结点数关系”
二叉树设n0是度为0的结点,即叶子结点,设n1是度为1的结点,设n1为度为2的结点,现在思考这三种结点之间的关系?一种思考的逻辑:观察结点与结点间边的关系一种方式: 边的总数为n0 + n1 + n2 - 1,可以看成:只有根结点没有上接的边; 另一种方式:0 * n0 + 1 * n1 + 2 * n2,这里看的就是每个结点下接的边; 两式结合在一起,就能化简出:n0 = n...原创 2019-05-08 18:54:00 · 1741 阅读 · 0 评论 -
算法笔记:平衡二叉树的最小结点数与斐波那契数列的关系
写点思考性质的文字,最好还是不要太突兀,背景前提什么的还是需要有的……平衡二叉树是什么?我自己的理解:二叉树里面的完全二叉树就是一种很平衡的树,即按照1-23-4567-89101112131415-……这么一行行分叉下去的数。所以在二叉树的定义里,就有了这样的描述:一个空树(根本没有结点的);或者任意结点,它的左右子树的高度差不大于1(我觉得这里用完全二叉树来辅助记忆挺不错)。但...原创 2019-05-10 16:19:17 · 3021 阅读 · 4 评论 -
算法笔记:链表基本操作及记录
关于链表的几点说明链表的位置:因为在写带头结点的链表时,默认头结点不存数据,所以可以把头结点的位置看作0,接着从后面第一位有效数据的结点开始为第1位置。**这一点一定要和数组分清楚,特别是用数组写静态链表的时候。自定义链表的操作:一定要清楚,开始的位置从头结点,还是从第一个数据结点,不然很容易出错的!指针型变量的申请:申请一个没啥事,直接int* num就好,但是如果要一...原创 2019-05-26 09:49:24 · 233 阅读 · 0 评论 -
算法随记:C++ sort()函数,自定义cmp()的使用理解
sort()sor()是C++标准库中的排序函数,使用很方便,传进去数组的起始和结束地址就行,注意是左闭右开,默认的排序是<,从小到大,不过可以自己写一个cmpare()来自定义,下面缩写cmp()函数。cmp()函数的返回值要是bool,核心要义也是比较,我是这么理解的,因为sort默认是从小到大,所以在cmp如果还是要从小到大,那就a < b,返回值bool为true,不改...原创 2019-05-22 15:42:47 · 9551 阅读 · 3 评论 -
算法笔记:关于bool数组赋值的问题
一个很严肃的问题一般情况,对于bool数组的初始化都是设为false,即:0之所以这样做的原因,数组其他部分的自动赋值会默认为0,所以,想要初始化全部为true,使用bool isTrue[N] = {true};就会出错,因为这样做,只有第一个位置为1(机器表示的true),其他都为0;所以,刷题刷得忘记思考得时候……**很容易被这种特别浅显的小问题所困恼!解决方法...原创 2019-08-28 16:17:42 · 5565 阅读 · 0 评论