自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python的函数

的缩写,意为定义,表示该部分的代码是实现这个函数的过程。“名称”是这个工具的名字,你可以按照你的想法取,但需要满足标识符的规范(如只能由字母,数字和下划线组成)。“参数”指的是这个工具运行时需要提供的额外材料,如比较两个数的大小时,我们需要提供比较的两个数字。我们不可能每次都从头开始制作(我需要钉钉子时,我不会从挖铁矿开始),因此,制作一些完成品非常重要,并且这些完成品使用起来要尽可能的简单。关键字返回,例如比较两个数的大小,我想要知道较大的数是哪个,我就可以把较大的数放在。的序列,我们使用函数。

2023-12-02 22:05:16 85

原创 Python中的基本结构

在编写程序时,有时候会有一些bug,对于解释执行的编程语言来说,在bug之前的所有代码都会正常执行,直到遇到bug,程序就会停止。对于编译执行的编程语言来说,这个代码是无法进行执行的,它必须调整好所有的错误信息,然后才能进行执行。在Python中,我们编写代码是从上向下进行编写的,同样的,程序也是按照这样的顺序执行的。如果满足“条件”,则执行“要做的事1”,否则,执行“要做的事2”。语句中,条件常常是关系运算符组成的关系式,或者逻辑运算符组成的逻辑表达式。不同的形式体现在代码中了,需要额外提到的是,

2023-12-02 22:04:27 172

原创 Python中的运算符

在Python中,我们也有这些运算符,不过不同的是,我们的运算符远远不止这些,大概分成赋值运算符,算术运算符,关系运算符,逻辑运算符以及复合运算符。赋值运算符的含义是将右边的数值赋给左边的变量(变量可以理解成盒子),也就相当于将右边的东西放在左边的盒子里。在这里有一个比较简单的比较方法(仅限于纯字母的字符串),如果一个字符串比另一个字符串出现在英语字典中较后的位置,那么靠后的那个字符串更大。在数学中,我们了解到,如果一个表达式中包含加减乘除,则我们需要先计算乘除,再计算加减。相等,然后在比较后一个字符,

2023-12-02 22:03:24 95

原创 Python中的类型

最终,编程精炼出这些类型——整数,小数(浮点数),字符串(文本),列表,元组,字典,集合。举一个例子,正方体,我们可以使用一个整数(或者小数)来描述它的边长即可。对于一个人,我们可以用若干个类型来描述,例如,姓名用字符串,身份证号用整数,身高和体重用小数,高矮胖瘦可以用文本“胖子”或“瘦子”亦或“正常”描述。但慢慢地,人们发现,在电脑上可以做更多有意思的事情,包括把现实里的所有内容都搬到电脑里。括起来的内容,相当于人们排的队伍,从前向后。在介绍Python的类型之前,我们需要明白的是,编程是用来做什么的?

2023-12-02 22:02:13 75

原创 Python

这种行为的局限性很大,一方面当我想要用大米换肉的时候,我需要找到身边需要用肉换大米的人,我才能实现这样的目标。它们强调的是能“叫”的不只是狗,任何动物都能“叫”,“叫”很重要,而是不是“狗”不重要。需要注意的是汇编语言仍然处于低级语言的行列,原因是汇编语言并没有脱离直接与硬件的交流,准确来说,汇编语言还是机器语言的对照符号。它们强调的是所有狗都能“叫”。那么,有了汇编语言,我们就可以发明一种高级语言,它可以有任何方式表达,只要它表达的内容足够准确,并且它可以转换成汇编语言,我们就可以用它来控制机器。

2023-12-02 22:00:31 42

原创 算法之递归回溯(六)

上一篇我们在描述迷宫问题时,提到了是否恢复状态的问题:[迷宫]这里需要提醒一下,并不是所有迷宫问题都是不需要恢复状态的。选择不恢复状态的原因是题解要求我们查看连通性即可——也就是两个点之间是否连通。。这一篇我们继续描述连通性的问题。由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下:0 0 0 0 0 00 0 1 1 1 10 1 1 0 0 11 1 0 0

2022-05-13 11:04:12 177

原创 算法之递归回溯(五)

上一篇讲解了:使用二维数组参与递归回溯的过程跳马问题总结来说还是在规定步数内进行移动,但对于迷宫问题来说,则是表明了起点和终点。我们查看关于这个问题的解析。一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能

2022-05-13 10:11:04 279

原创 算法之递归回溯(四)

上一篇我们讲解了八皇后的问题:八皇后这一篇我们将继续聊迷宫棋盘类问题。八皇后问题我们使用一维数组模拟二维数组,以获得较好的效率。接下来,我们将考虑使用二维数组求解迷宫棋盘类问题的解。其中比较典型的是跳马问题。马在中国象棋以日字形规则移动。请编写一段程序,给定5×5大小的棋盘,以及马的初始位置(0,0),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。八皇后问题好像我们讨巧了,我们使用一维数组换来了二维数组的功能。这种事情少之又少,我们不能总是遇到这样的情况。我说过,当二

2022-05-11 18:25:12 671

原创 算法之递归回溯(三)

前两篇的内容重点放在递、归的功能和作用上递归回溯的过程这一篇我们聊一聊回溯法在迷宫棋盘类问题中的应用吧。一般来说,这种迷宫棋盘类的问题都是使用二维数组来求解。但又是也有例外。这是一个典型的例外——八皇后问题。那么,关于这类问题,我们在什么情况下选择一维数组,什么情况下选择二维数组呢?这跟数组的功能有关系。一般来说,一维数组中的元素最多可以表示两层含义。第一层由数组中的元素提供,第二层由数组的下标提供。比如说,对于数组int arr[4] = {1,2,3,4}来说,arr[3]得到的4可以表示一层含义,其

2022-05-11 17:28:05 277

原创 算法之递归回溯(二)

上一篇,我们从递归的递和归中发现了尝试的功能:[利用递归求解小明跳楼梯的跳法](https://blog.csdn.net/weixin_43204180/article/details/124677625)这一篇,我们将继续探究尝试的功能。每一个小孩子长大都是尝试的结果。他们不断的用身体感知这个世界,尝试与世界接触,他们才得以了解这个世界。这就是尝试的力量。我们在程序中也需要保持这样的热情,尝试着不同的活法。从跳楼梯的例子中,我们可以了解到,楼梯的阶数被拆成了1+1+1,1+2等等形式,这就好像是对数

2022-05-10 12:52:00 150

原创 算法之递归回溯(一)

在介绍递归算法时,递归发挥了两个作用,一个是递,另一个是归。递的意思是不断向下延伸,归的意思是返回上一个步骤。这两个操作为我们提供了无限的可能。其中最重要的一个应用就是尝试。关于尝试的概念,使用迷宫是好理解的。当我们身处一个迷宫中,我们可以做的事只有一个,不断的尝试,并在尝试过的位置做好标记。走过的路,我们不会再重复进行,这让我们可以快速通过迷宫。递归回溯的功能正如身处迷宫中的我们——不断尝试,并对走过的路进行标记。我们以一个简单的实例来说明问题。小明跳楼梯,小明每次可以跳1格或2格。问小明跳n阶楼梯

2022-05-10 00:09:10 313

原创 算法之递归算法(五)

上一篇将讲解的内容是从整体流程思考递归函数的内容这一篇我们衔接上一篇继续讲解从整体流程思考递归函数的内容。我们同样使用一个实例来分析。【题目描述】任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=22+2+20(21用2表示)3=2+20所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=210+28+2

2022-05-07 12:37:13 781

原创 算法之递归算法(四)

上一篇我们讲解了通过减少参数规模的方式求解问题:通过减少参数规模的方式求解问题前几篇内容中,我们使用递归函数就可以直接得到答案,但对于有些情况来说,这有些不现实,我们不可能求解的内容刚好都是一个结果。有时候,我们需要输出一串内容。Hanoi塔就是这样的问题。有三根柱子,分别为a,b,c。现在a柱上从下到上放着n块从大到小的圆盘。如果每次只能移动一块圆盘,请问把n块圆盘从柱子a移到柱子c上,一共有多少种移法?每一次移动的过程是怎么样的?要求不允许大圆盘放在小圆盘上。在递归算法的例题中,Hanoi塔是

2022-05-07 11:10:28 211

原创 算法之递归算法(三)

前一篇我们使用小明跳楼梯的例子说明了递归函数求解的方法:递归函数求解的方法这一篇我们继续了解递归算法的内容。对于一个参数的递归函数,我们找到了一种通用的方法,那就是直接寻找f(n)与f(n-1)之间的关系即可。但对于有些问题,一个参数是不够的。这一篇,我们将查看一个使用两个参数的递归算法练习题来讲解相关内容。给定两个整数,计算其最大公约数和最小公倍数。这个题干很简单,就是求最大公约数。如果你的第一反应是从大到小进行循环,如果某一个数刚好能够被这两个数整除,这个数字就是最大公倍数的话,这一篇可能是比

2022-05-07 00:26:39 377

原创 算法之递归算法(二)

第一篇,我们详细讲解了递归算法实现归并排序的执行过程。递归算法,解析归并排序的过程递归算法的解题思路就是使用递归函数来求解。其实这只是一个表现形式,具体的解题方法还是需要找规律来获得。只不过,这个找规律与数学中的找规律不同。数学中的找规律往往是根据前几个数字来推演,也就是根据前几个数字来推算,比如说,给一个序列其中前几个数字为 1,3,5,7...根据规律,我们可以发现这个序列是奇数序列,并且第一个元素为1,因此可以概括为2*k-1,其中k表示第k项。递归函数的方法并不是如此。同样给出的1,3,5,7..

2022-05-06 18:40:37 246

原创 算法之递归算法(一)

所谓递归算法,其实就是使用递归函数求解问题。而什么是递归函数呢?递归函数就是函数内调用自己的函数。有一个小故事很好的诠释了递归的功能。“从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚给小和尚说故事,说,从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚和给小和尚说故事…”在这个故事里,故事套着故事,无穷无尽。这就是递归函数的特点。//函数f是一个递归函数int f(int n){ return f(n);}在这样的一个函数f中,调用了函数f。这就是递归函数了

2022-05-06 12:50:22 329

原创 算法之排序算法(六)

前几篇的内容已经详尽的介绍了各个算法。上一篇也主要讲解了归并排序的具体实现:归并排序这一篇的内容我们将聊聊关于stl的内容。stl指的是Standard Template Library(标准模板库)。这是C++的标准库。它包含很多已经实现的内容,比如我们今天将要接触到的sort——标准库排序函数。sort是标准库给我们提供的排序函数。一般来说,它的执行速度是有优势的。因此,在情况允许的情况下,选择sort是一个不错的选择。但sort函数并不是由某一种算法实现,而是由多个算法集合合成,当数据量比较小时(

2022-05-04 12:10:21 241

原创 算法之排序算法(五)

有了上篇的铺垫,这篇关于归并排序的内容就会简单许多。归并排序总的来说,归并排序的内容和合并两个有序序列是有关的。具体的关系是什么呢?如果我们能将数组一分为二,然后一直分下去,直到每个序列只有一个元素。此时,每一个序列都是有序的。接着,我们将这些需要按照要求合并起来。合并之后的序列就是有序的序列了。我们使用实例来说明问题吧,我们使用这些数字1, 6, 0, 5, 7, 4, 3尝试解答一下详细的内容。这张图是很明显的。从上到下,每一个长序列都被拆解成了单独元素的序列。这样就可以运用我们的上一篇讲解的合并

2022-05-04 11:06:23 120

原创 算法之排序算法(四)

上一篇内容是关于快速排序的:快速排序我们了解到快速排序有它的优点,执行速度快,消耗的时间和空间少。但他也有它的缺点——不稳定。这个缺点可大可小,我们需要在不同的环境中查看。对于稳定性要求高的环境中,它对于我们来说就不是那么适宜。而仅仅追求速度的环境中,它就可以放大异彩。就像我们每一个人,各有擅长的地方,也有不足的地方。我们总是想着补足不足,而忘了我们最擅长的内容。擅长的内容其实才是我们的乐趣呀。有时候看向我们擅长的内容会让我们更有信心。但今天我们并不是要了解快速排序的优势,或者说了解快速排序在什么环境中

2022-05-01 00:04:06 133

原创 算法之排序算法(三)

上一篇我们介绍的是:冒泡排序冒泡排序我们说是向鱼儿吐泡泡一样。最大的逐渐向最右侧移动。我们采用的方法是比较相邻的两个元素。这种方法并不快。它的时间复杂度为n^2。当数据量比较大时,时间将会非常长。因此我们希望改进一下这样的程序。当数据量比较大时,运行时间仍然是我们可接受的。我们可以了解一下快速排序。快速排序从名字就可以看的出来,它的速度是他的优势,特别当数据量非常大的时候。快速排序的核心是将数据分成两个部分,对于每一部分进行排序,最终再合起来。这句话是不好理解的。我们企图思考一下,如果让你对5,3,9进

2022-04-28 16:19:32 178

原创 算法之排序算法(二)

上一篇是关于算法的描述算法的描述,不同排序算法的区别不同的排序算法有着不同的特点,接下来我们将一步一步剖解排序算法的内容。我们将从这样的顺序进行。排序算法冒泡排序快速排序归并排序桶排序标准库排序函数标准库排序函数与结构体的结合我想经过这样的描述,对于排序算法的内容,我们将了解无比,而不再发愁。那么我们将开始第一篇关于算法的详细描述。冒泡排序,冒泡排序算法的原型是鱼儿吐泡泡。我想在很久以前,有一位老科学家,家里养了几条鱼。鱼儿每天都在鱼缸里活蹦乱跳。有一天早晨,他看到鱼儿在鱼缸中吐着泡

2022-04-28 14:44:24 258

原创 算法之排序算法(一)

排序在生活中使用率是很大的。在学校,老师会把同学们从矮到高排成几列,有序地放学。在排座位的时候,老师也要考虑每位同学的身高,以及他的视力情况,近视的同学排位置可能会更靠前。这就涉及到排序算法。排序算法的种类有很多。但并不是每一种算法我们都要掌握的。其中一些算法是比较关键的。例如,冒泡排序,快速排序,归并排序和桶排序。提到这些算法的区别,我们不得不补充一下关于算法的描述标准——时间复杂度和空间复杂度。时间复杂度指的是在执行算法过程中所消耗的时间。空间复杂度指的是在执行算法过程中所消耗的空间内存大小。在这里,

2022-04-28 12:10:21 119

原创 算法之高精度(八)

上一篇讲解的是两个高精度数字相除接下来这篇是高精度算法的最后一篇内容,它涉及高精度除法的第二种——高精度数字除以常规数字。我们知道,常规数字是可以直接进行除法的,因此,我们不一定都要转换为高精度的整数数组形式。从高精度数字乘以常规数字时,我们就提到过,常规数字转换为高精度的整数数组形式需要使用循环语句,这是非常浪费时间的。特别在复杂的计算中,多一次循环将花费大量的时间。因此我们企图寻找其他方案解决高精度数字与常规数字之间除法的问题。在前面几篇文章里,我们总是使用举例的方式描述所讲的算法。当然,这次也不例

2022-04-28 01:48:58 254

原创 算法之高精度(七)

前一篇内容简单描述了:高精度数字和常规数字相乘相对于乘法,高精度除法在高精度算法中比较难的部分。原因是不论加减乘的内容,我们始终只需要去计算,而除法就会涉及到判断。我们必须了解到被除数÷除数=商…余数。余数不能大于除数,也不能小于0。这是我们需要控制的。这篇我们将详细介绍两个高精度数字相除。首先,我想我还是需要提醒一下大家。除法的原理是什么?我常常称除法是减法的快速运算。如何理解这句话呢?我们设想,一个盘子里有10个苹果,需要分给3位小朋友,请问每位小朋友能分到几个?你会很快反应出来,3个。你的

2022-04-27 18:18:50 252

原创 算法之高精度(六)

前一章节我们了解了:高精度数字乘法的规则——两个高精度数字相乘这一篇我们将尝试描述一个高精度数字与一个常规数字相乘的解决方案。你可能也会产生好奇,毕竟使用整数数组表示数字的方式是不论高精度还是常规数字的。在这里还是举一个实例来表明我的含义。例如:数字1234使用int类型,甚至short类型完全能够表示的,但同样的,我们使用整数数组表示,也并不能认为是错误的。下标0123数字4321对于这样的形式,我想,把它当作高精度的一种也是可以理解的。这样的话,高精度数字乘上

2022-04-27 16:53:38 124

原创 算法之高精度(五)

高精度数字的减法运算法则也已经介绍清楚了:高精度减法接下来,按照顺序我们该介绍高精度乘法了。我们说高精度乘法其实是分为两个部分的,第一个部分是两个高精度数字相乘,另一种是高精度数字乘上一个常规数字。我们一个一个介绍吧。首先,两个高精度数字相乘。与高精度加减法类似,我们回顾一下小学五六年级的知识,两个整数相乘。我们假设计算45*12的积。在数学中,你会做什么?没错,你可能会列一个竖式,然后一个一个计算。我们使用表格尝试表述一下。下标01234乘数00045

2022-04-25 17:43:46 249 1

原创 算法之高精度(四)

这是高精度算法的第二篇,第一篇描述的是加法运算方式:高精度加法这一篇我们描述高精度减法。减法和加法有些类似。如果你理解了高精度数字加法完整的运算法则,我想理解减法也是非常容易的。我们仍然使用一个...

2022-04-25 12:13:53 214

原创 算法之高精度(三)

上篇我们讲完了输入和输出的内容:高精度输入输出从数学角度来说,不管是整数还是小数,不管表示的数字大还是数字小,都应该能够进行四则运算——加减乘除。这几乎是必须的。我们的高精度数字也应该能进行这样的处理。我们把涉及高精度四则运算的算法称之为高精度算法。不论如何,我们开始进行吧。不过,我想还是应该先介绍一下高精度算法包含哪些?1.高精度加法——两个高精度数字相加2.高精度减法——两个高精度数字相减(相减结果会大于0)3.高精度乘法——两个高精度数字相乘4.高精度乘法——一个高精度数字乘以常规数字5

2022-04-25 00:47:29 341 1

原创 算法之高精度(二)

上一篇我们描述了:高精度是什么?如何表示高精度?我们知道高精度是用来表示数字的。既然是数字,那么我们会想到使用数字来进行运算。比如说,加法,减法,乘法,除法等。我们依次来介绍吧。在具体介绍加减乘除之前,我想我们还是非常有必要了解一下高精度数字的输入输出方式。高精度数字是如何输入的?很显然,高精度的数字是超过long long的表示范围的。因此我们并不能使用任何现有类型的变量直接存储。我们上一篇提供的方式是使用整数一维数组来存放高精度数字。输入时,我们也采用输入数组一样的方式吗?...

2022-04-24 19:14:58 502 1

原创 算法之高精度(一)

这是关于高精度的介绍。什么是高精度?在现实生活中,我们也会见到很多比较大的数字。比如说3141592662623。我们在表示这些数字的时候常常会使用一些单位(万,亿,十亿等等),比如说,三万一千四百一十五亿九千二百六十六万二千六百二十三。但计算机中并不是这样表示的,计算机中使用的是二进制表示,而不是十进制。电脑中表示一个数字所使用的二进制数量是有限的,通常是32位或64位。32位所能表示的最大数是231,使用估算的话,大概是21亿左右。这是int类型的极限了。64位所能表示的最大数是263,估算得到的数

2022-04-23 00:26:42 1240

原创 大整数的输入输出

在C++中,我们一般使用short/int/long long等等类型表示整数。但每一个类型都是有表示范围的,比如long long类型最多能表示19位数。这几乎是C++中表示数字的类型的极限了。如果我们还想表示更大的数字,那我们该怎么办呢?这就是大整数算法的作用。大整数跟常规整数一样,都涉及到加减乘除等等。常规整数可以直接用一个变量表示,大整数呢?就必须使用数组表示了。我们常常使用整数数组来表示大整数,而大整数的输入则使用字符串类型(string).使用整数数组来表示大整数,是将大整数的每一个位存

2022-03-25 18:40:13 2677

原创 while循环中将cin输入作为条件问题-扩展

先看一段代码。vector<int> vecNum;int num = 0;while(cin >> num) vecNum.push_back(num);cin >> num;这是一个简单的代码。但是这里会有一个问题,就是cin >> num; //位于循环外的输入这行代码无法输入任何数值。原因是什么呢?我们知道在循环中,我们想要结束循环的条件是cin >> num不为真,那么,我们就需要在输入结束的时候,先按下回车键然后

2020-05-12 15:01:31 987

原创 C++Pramer5th第十章泛型算法

这是一篇关于泛型算法的总结文章。头文件:#include <algorithm> #include <numeric>一般情况下,算法并不直接操作容器,而是遍历由两个迭代器指定的一个元素范围来进行操作。以下算法包含在 algorithm 头文件中,并包含此定义vector<int> vec;下面是算法格式及内容:find(vec.begin...

2019-07-10 21:37:23 167

原创 不确定个数之和等于定值,求最多和最小个数问题(C++)

这道题是在leetcode中做到的,其中的题目是《一和零》,有兴趣的可以去查看相关题目。https://leetcode-cn.com/problems/ones-and-zeroes/思路:首先,我们知道相加的个数越多,必定加数的数额一定要选择小一点,且不能选择重复的。这样,我们就想到了,先将其从小到大进行排序(此时用到C++标准库中的sort函数),在用循环来选择那些是合适的数,不合适的...

2019-07-08 17:38:06 396

空空如也

空空如也

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

TA关注的人

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