01 2022 档案
摘要:7.2.3 解答树 这棵树的第0层有n个子节点,第1层有(n-1)个子结点,第二层有(n-2)个子节点,...,第n层就没有子节点了,即第n层的结点都是叶子结点,总共有n!个结点 由于这棵树是从无到有逐渐生成完整解的过程,因此将其称为解答树 如果某问题的解可以由多个步骤得到,而每个步骤都有若干种选择
阅读全文
摘要:数据结构又添一大虎将 字典 python内置的数据结构之一,与列表一样是一个可变序列 以键值对的方式存储数据,字典是一个无序的序列 {python篇到此暂时停止更新,接下来笔者会花费大量的时间在高数,离散和C++上,python有缘再见,主要是和爬虫弄混了。。。}
阅读全文
摘要:有没有想过如何打印所有排列呢?输入整数n,按字典序从小到大的顺序输出前n个数的所有排列。两个序列的字典序大小关系等价于从头开始第一个不相同位置处的大小关系 eg:(1,3,2)<(2,1,3),字典序最小的排列是(1,2,3,4,...,n),最大的排列是(n,n-1,n-2,...,1) 7.2.
阅读全文
摘要:Parentheses_Balance 点击查看代码 #include<iostream> #include<stack> using namespace std; int main() { int T; scanf("%d%*c", &T); while(T--) { string str; ge
阅读全文
摘要:列表生成式简称“生成列表的公式” 语法格式: [i*i for i in range(1,10) ] 表达列表元素的表达式 自定义变量 可迭代对象 表达式类似数列通项 可迭代对象就是范围限制 注意表达式中通常包含自定义变量 example: 点击查看代码 lst = ['c' for i in ra
阅读全文
摘要:列表元素的排序操作 常见的两种方式 调用sort()方法,列表中的所有元素按照从小到大的顺序进行排定,可以指定reverse = True,来指定降序排序 sort方法也是通过列表对象来调用的 注意sort方法并不会创建一个新的列表,是在原列表的基础上进行的 list.sort(reverse =
阅读全文
摘要:列表元素的修改操作 为指定索引的元素赋予一个新值 为指定的切片赋予一个新值 注意切片操作的过程中,只有步长为1的时候,才可以实现元素个数不相等的删除,增加,否则必须使增加或删除的元素个数相等才可以 example: 点击查看代码 lst = [1, 2, 3, 4, 5, 6, 7] print(l
阅读全文
摘要:列表元素的删除操作 删除方法1:remove()方法, 一次删除一个元素 重复元素只删除第一个 元素不存在抛出ValueError 依然注意的地方在于一次只能删除一个元素!并且元素必须存在,否则无法移除 删除方法2:pop()方法 删除一个指定索引位置上的元素 指定索引不存在抛出异常IndexErr
阅读全文
摘要:列表元素的增加操作 方法1:append(),最常用的添加方式,这是在列表的末尾添加元素 append是追加的意思 注意append只能添加一个元素 方法2:extend()在列表的末尾至少添加一个元素 这边注意区分 append(list)#这边将list作为一个元素添加进去 extend(lis
阅读全文
摘要:列表元素的查找 判断指定元素在列表中是否存在,而已使用in和not in in和not in可以判断一个元素是否在列表中,或者字符串中 'p' in 'python'是正确的语句 元素 in 列表名 元素 not in 列表名 这就是判断元素是否在列表里面 列表元素中的遍历,是通过for-in循环
阅读全文
摘要:获取列表中的多个元素 需要使用切片操作: 语法格式: 列表名[start : stop : step] (新的列表对象) 切片的结果:源列表片段的拷贝(只是拷贝,不是引用!) 切片的范围:[start, stop)(不包括stop) step默认为1(如果没有输入step的话,即[start:sto
阅读全文
摘要:获取列表中的单个元素 1.正向索引从0到n-1 2.逆向索引从-n到-1 3.指定的索引不存在,抛出IndexError 这边的n表示列表中的元素个数 想要获取索引为x的元素就是直接通过list[x]就可以了 当然这边尤为需要注意的就是列表中元素的索引与其他语言不同的地方在于,其存在逆向索引,并且是
阅读全文
摘要:获取列表中指定元素的索引 index()方法 注意index方法是列表对象中的,因此使用时候前面需要先加入列表对象才可以 1.如果查找列表中存在N个相同元素,只返回相同元素中的第一个元素的索引 2.如果查询的元素在列表中不存在,则会抛出ValueError 3.还可以在指定的start和stop之间
阅读全文
摘要:例表的特点 1.列表元素按顺序有序排列 ['hello', 'world'] ['world', 'hello'] 这两个列表的顺序是不一样的,同时他们是紧挨着的,一个接着一个,连续的有序排序 这边就可以与C中的数组进行对应理解 2.索引映射唯一一个数据 python中的索引有意思的地方在于他将索引
阅读全文
摘要:第七章主要讲述暴力求解法 许多问题都可以暴力解决--不用动太多脑筋,把所有可能性都列举出来,然后一一试验,尽管这样的方法看起来显得很“笨”,但却常常是行之有效的 在枚举复杂对象之前,先尝试着枚举一些相对简单的内容,如整数,子串等,尽管暴力枚举不用太动脑筋,但对问题进行一定的分析往往会让算法更加简洁,
阅读全文
摘要:Undraw_the_Trees 点击查看笔者代码 #include<iostream> #include<vector> using namespace std; const int maxn = 20000+5, maxl = 200+5; int cnt = 0, sum = 0; strin
阅读全文
摘要:列表需要使用中括号[]元素之间使用英文的逗号进行分割 []就定义了一个列表 列表的创建方式: 第一种方式:l = [....] 第二种方式:使用内置函数list() l = list([...]) 这边的内置函数list(),笔者认为本质上和int(),str()是一样的都是若强转类型函数 所以第一
阅读全文
摘要:变量可以存储一个元素,而列表是一个大容器可以存储N多个元素,程序可以方便地对这些数据进行整体操作 列表相当于其他语言中的数组 注意这边列表强大的地方在于,其可以存储不同类型的对象,这是容器,是广义数组,更加符合我们人的日常思维,变量组的有序结合 变量存储的是一个变量的引用 而列表存储的是多个变量的引
阅读全文
摘要:二重循环中的break和continue用于控制本层循环,注意其不会影响外层循环的执行,这边和C中的break和continue的作用范围是一样的,也符合逻辑 example: 点击查看代码 for i in range(5): for j in range(5): if j==1: break p
阅读全文
摘要:有嵌套分支,那肯定也有嵌套循环 循环结构中又嵌套了另外的完整的循环结构,其中内层循环作为外层循环的循环执行体 这边出现了单行输出的另外一种模型 print(i, end=' '),这边应该是print对象默认end='\n',所以此时将最后的字符改成空格或者\t都可以了 这样子就可以实现单行输出了,
阅读全文
摘要:else的搭配 与else语句配合使用有三种情况 if ...: else: if条件表达式不成立的时候执行else 注意else还可以与while循环和for循环组合在一起(这是一个全新的知识) 注意以下的语句: while: else: for in: else: 这上面循环语句中的else只有
阅读全文
摘要:continue语句 用于结束当前循环,进入下一次循环,同样通常与if分支结构一起使用 (这边和前面的break可以结合在一起与C中的一样的理解) 注意这个不是终止整个循环只是终止当前循环进行下一次循环 输出零到五十[0,50]之间五的倍数: example: 点击查看代码 for i in ran
阅读全文
摘要:break语句 用于结束循环结构,通常与分支结构if一起使用 即非正常循环,在中间循环的时候直接退出 注意break打断的是循环语句,不是if语句 注意while循环中一般需要有改变变量这个操作,否则很容易成为死循环 example: 点击查看代码 for i in range(3): psd =
阅读全文
摘要:水仙花数 153 == 3**3 + 5**3 + 1**3 点击查看笔者代码 for i in range(100, 1000): a = i % 10 b = i // 100 c = (i // 10) % 10 if a**3+b**3+c**3 == i: print(i) 假设一个数k,
阅读全文
摘要:for-in循环也可以简单称为for循环 in表达从(字符串,序列等)中依次取值,又称为遍历(全部都要取到) for-in遍历的对象必须是可迭代对象 目前可以简单认为只有字符串和序列是可迭代对象 它是一次从可迭代对象中取出元素赋值给自定义的变量 for-in的语法结构: for 自定义的变量 in
阅读全文
摘要:依然是while循环四步骤 初始化变量 条件判断 条件执行体 最后就是输出答案就可以了 点击查看笔者代码 a = 1 sum = 0 while a <= 100: if (a+1)%2:#if not a%2也是可以的,注意与或非的使用and or not sum+=a a+=1 print(su
阅读全文
摘要:有一条名为Pregel的河流经过Konigsberg城,城中有7座桥,把河中的两个岛与河岸连接起来,当地居民热衷于一个难题,是否存在一条路线,可以不重复地走遍7座桥 首先是抽象为平常中我们常见的一笔画问题,这样的路线称为欧拉道路(eulerian path) 点击查看欧拉回路 C..........
阅读全文
摘要:好吧,笔者开单章开上瘾了,话不多说,先来一个拓扑排序,笔者最初自己写的时候并没有使用拓扑排序吧 Ordering_Tasks题解 点击查看笔者代码 #include<iostream> #include<cstring> #include<vector> using namespace std; c
阅读全文
摘要:循环结构 反复做同一件事情的情况,成为循环 循环的分类 while for-in 语法结构: while 条件表达式: 条件执行体(循环体) 选择结构的if与循环结构while的区别 if是判断一次,条件为True执行一次 while是判断N+1次,条件为True执行N次 同等条件下if执行效率高于
阅读全文
摘要:循环结构终于会出现了 这章讲完差不多读者可以实现大部分程序了 range()函数 用于生成一个整数序列 内置函数:前面不需要加任何前缀,可以直接使用的函数 创建range对象的三种方式 range(stop) 该函数的作用是创建一个从[0,stop)的整数列表,同时两个数之间的长度默认为1,即步长为
阅读全文
摘要:pass语句 什么都不做,只是一个占位符,用在语法上需要语句的地方 一般是用于搭建语法结构,该段代码还没有实现的时候,用pass来占个位 一般和以下语句一起使用 1.if语句的条件执行体 2.for-in语句的循环体 3.定义函数时的函数体 example: 点击查看代码 a = int(input
阅读全文
摘要:笔者现在才发现前面的markdown文件下的python语句是没有缩进的,所以之后的代码展示,笔者将就会将他放在代码段中进行展示,一般不会再展示再文本框中了,特此通知一下 条件表达式就是if else的简写(三目运算符狂喜) 注意条件表达式仅仅只是对if else双重分支结构的一种简化 语法结构x
阅读全文
摘要:嵌套if 语法结构: if 条件表达式1: if 内层条件表达式: 内层条件执行体1 else: 内存条件执行体2 else: 条件执行体 外层条件+内层条件的形式 example:#模拟打折的程序如下 money = int(input('Please input your cost : '))
阅读全文
摘要:多分支结构 一般针对的是一个连续区间段的不停的处理操作 语法结构: if 条件表达式1: 条件执行体1 elif 条件表达式2: 条件执行体2 elif 条件表达式N: 条件执行体N else: 条件执行体N+1 注意这边的选择与C中一样至多只会执行其中的一个语句执行体 python中允许多分支语句
阅读全文
摘要:双分支结构 语法结构: if 条件表达式: 条件执行体1 else: 条件执行体2 针对非A即B的选择情况 example:#判断一个整数是否为奇数或者偶数 num=int(input('Please input a number : ')) if num%2:#if num%2 == 1 is a
阅读全文
摘要:选择结构(程序来源于生活) 程序根据判断条件的布尔值选择性的执行部分代码 不同条件下实现不同的操作处理 单分支结构 语法结构:if 条件表达式://冒号不要忘了 条件执行体 条件表达式就是条件判断,也就是有条件运算符的语句 注意python中是使用缩进表示层次结构,这点与C中是完全不一样的 笔者调试
阅读全文
摘要:python一切皆对象,所有对象都有一个布尔值 变量也是对象 获取对象的布尔值,使用内置函数bool()来获取对象的布尔值 以下对象的布尔值位False False 数值0 None 空字符串 空列表 空元组 空字典 空集合 (一切空的对象bool值都是False) example: print(b
阅读全文
摘要:1996年,计算机科学家证明了:任何简单或复杂的算法都可以由顺序结构,选择结构和循环结构这三种基本结构组合而成 生活中的事情也是类似的,可以参照生活的经验来理解 覆水难收,顺序结构 选择分支,选择结构 循环往复,循环结构 顺序结构:程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束(
阅读全文
摘要:前面的篇幅占了太多,再次新开一章,讲述BFS求最短路的问题 注意此时DFS就没有BFS好用了,因为DFS更适合求全部解,而BFS适合求最优解 这边再次提醒拓扑变换的思想在图形辨认中的重要作用,需要找寻不同图形在进行拓扑变换时候的不变性 假设有一个网格迷宫,由n行m列的单元格组成,每个单元格要么是空地
阅读全文
摘要:来了,必备的经典曲目,C中最痛苦的部分 从上到下,优先级依次递减 ** / // % -(算术运算符) << >> & |(位运算符) < >= ⇐ == !=(比较运算符) and or(布尔运算符) =(赋值运算符) 以上简略的优先级可以简记为 算数 > 位 > 比较 > 布尔 > 赋值 赋值运
阅读全文
摘要:位运算:将数据转成二进制进行计算 这边的位运算符和C中的类似,可以直接将C中的只是转移过来,提高效率,感兴趣的读者可以前往C中的专区查看位运算的规则 4(2)=0000 0100 8(2)=0000 1000 按位与& 4&8(2)=0000 0000 按位或| 4|8(2)=0000 1100 e
阅读全文
摘要:布尔运算符,对于布尔值之间的运算 and 类似C里的与运算,有假为假,全真为真,最好用布尔类型参与,虽然整型也可以,但是不符合逻辑,而且其输出值挺有意思的,并不全为一或零组成 eg: a,b=1,2 print(a==1 and b==2) print(a==1 and b<2) print(a!=
阅读全文
摘要:比较运算符,对变量或表达式的结果进行大小,真假比较 去结果为真假,布尔类型 比较运算符的结果为布尔类型(即True或者False) a,b=10,20 print(a>b)//大于 print(a<b)//小于 print(a>=b)//大于等于 print(a<=b)//小于等于 print(a=
阅读全文
摘要:赋值运算符 = 执行顺序:从右到左(右结合性) example: a = 1+2 print(a)//output:3 注意输出不是1,因为运算符是从右到左执行的 支持链式赋值 a=b=c=20 这边的顺序是 c=20 b=c a=b 这边的程序证明了之前讲述的规则是错误的,确实标识符存放的地址会根
阅读全文
摘要:常用运算符包括 1.算术运算符 2.赋值运算符 3.比较运算符 4.布尔运算符 5.位运算符 接下来的章节将会对这些运算符逐个讲解 算术运算符分为 (1)标准算数运算符 (2)取余运算符 (3)幂运算符 标准算数运算符 加+ 减- 乘* 除/ 整除// 取余运算符% 幂运算符** 这边的标准算数运算
阅读全文
摘要:经典的a+b问题终于重出江湖了 a=input('a = ') b=input('b = ') print(a+b)//error,因为此时ab是字符串类型,其加号起到的是连接的作用 所以这就是类型转换的必要性,或者说从面向对象的语言开始就有的因为对象的出现而存在的更加严格的要求 print(int
阅读全文
摘要:input()函数的介绍 作用:接受来自用户的输入 返回值类型:输入值的类型为str 值得存储:使用=对输入得值进行存储 input()函数的基本使用 name = input('What's your name\n') name是变量的标识符,=赋值运算符,将input的值赋给name,input
阅读全文
摘要:注释 在代码中对代码的哦你跟那个进行解释说明的标注性文字,可以提高代码的可读性(goto震怒) 注释的内容会被python解释器忽视 注释的类型通常包括三种 单行注释:以'#'开头,直到换行结束 #users 多行注释:并没有单独的多行注释标记,将一堆三引号之间的代码成为多行注释 实际上没有多行注释
阅读全文
摘要:float()函数不能将文字类的字符串类型转换成小数类型 同时将整数转换成浮点数类型的时候会在整数后买你加上.0 print(float(1))//output:1.0 print(float('1'))//output:1.0 print(float(True))//output:1.0 prin
阅读全文
摘要:图(graph)描述的是一些个体之间的关系。与线性表和二叉树不同的是,这些个体间不是前驱后继的顺序关系,也不是祖先后代的层次关系,而是错综复杂的网状关系 对于线性表(链表来说)各种节点之间的关系是前驱后继 对于树来说,各种结点之间的关系是祖先后代的层次关系 对于图来说,各种结点之间是错综复杂的网状关
阅读全文
摘要:#好吧,笔者错误估计树结构中的内容了,只能再来一篇写一下非二叉树的模型,放心,马上向图前进 借助这篇文章一定要注意,再C++中传递已知长度的数组,如果传递引用的时候(指针也是一样) 格式如此type (&name)[m][n] 这样才会被计算机认可,其实也正常,这与运算符的优先级相关 []的优先级高
阅读全文
摘要:stringstream类涉及到多次类型转换的时候容易出现异常错误 因为第一次数据如果读入eof或者输出完整来到eof,此时stringstream会自动为其添上eofbit标志位,此时继续进行任何操作都会认为失败,clear清除标志位的作用就是这个,使得stringstream可以再次被使用 标志
阅读全文
摘要:数据类型转换 需要将不同数据类型拼接在一起的时候就需要先进行数据类型转换 str+str//这里的+叫做连接字符,有点类似C++中的操作符重载,老对象里面的内容了 在python中整型和字符串类型不能直接拼接,需要将整型转换成字符串类型,再参与拼接才可以 总述 str() 将其他数据类型转换为字符串
阅读全文
摘要:字符串类型--不可变的字符序列(常量字符串) 可以使用单引号双引号三引号来定义 单引号和双引号定义的字符串必须在一行 n1 = 'hello world'//True n1 = 'hell0 world'//False 三引号定义的字符串可以分布在连续的多行 n1 = '''hello world'
阅读全文
摘要:布尔类型 boolean(bool) 用来表示真或假的值 True表示真,False表示假 这边的布尔值与其他语言不一样的地方在于,其可以转换成整数类型参与表达式运算 其中True = 1, False = 0 布尔值可以转换成整数值进行计算,可以直接拿去计算就可以了 n1 = True n2 =
阅读全文
摘要:浮点数由整数部分和小数部分组成 浮点数存储不精确,会存在浮点误差 n1 = 1.1 n2 = 2.2 print(n1+n2) 以上的例子就能很好的体现出浮点误差所带来的影响 解决方案,导入模块Decimal 猜测变成了大整数加法进行,最后通过字符串的形式输出 from decimal import
阅读全文
摘要:整数类型 integer简写为int python中默认的整数是十进制呈现 整数在这里包括正数负数和零 注意整数可以表示成二进制,八进制,十进制,十六进制(默认读取呈现方式为十进制) 0b+数字 表示二进制表示 (binary) 0o+数字 表示八进制表示 (octonary) 0x+数字 表示十六
阅读全文
摘要:常用的数据类型 整数类型 int 浮点数类型 float (定点数与之对偶) 布尔类型 bool 只能是true或者false 字符串类型 str name = 'Users' print(id(name), type(name)) name = 23 print(id(name), type(na
阅读全文
摘要:当多次赋值之后,变量名会指向新的空间 注意,估计python中字符串的输入会先分配静态空间,'123'是常量字符串,所以多次赋值字符串变量时,会出现变量名指向新的空间,但是如果所存储的数据类型不是该类型,那么将不会改变原来变量所在的空间,这里面的机制与C类似 如果改变字符串变量的值得时候,原先的内容
阅读全文
摘要:变量可以理解为带有标签的盒子 即可以通过标签(标识符)访问变量 而变量本身是可以存放值的,因此类似于一个装东西的盒子 注意计算机中=是赋值运算符,不是数学中的相等 标识符的命名规范在前面已经讲过,与C中的命名规则差不多 python中最有意思的是其大大简化了变量的定义过程,前面没有出现数据类型 C+
阅读全文
摘要:保留字,有一些单词被赋予了特定的意义,这些单词不能作为对象的名字 想要快速获取python中的关键字可以通过以下的程 序来快速实现 import keyword print(keyword.kwlist) //['False', 'None', 'True', 'and', 'as', 'asser
阅读全文
摘要:计算机是由逻辑电路组成,逻辑电路只由开关两种状态组成 也就是一个位置仅仅只能表示两种状态,k位可以表示2^k种状态 bit位,8bit组成1byte字节 1024byte = 1KB千字节 1024KB = 1MB兆字节 1024MB = 1GB吉字节 1024GB = 1TB太字节 8bit可以表
阅读全文
摘要:第六章中树的内容较多,因此特地多开一篇来进行总结。 6.3.3 二叉树的递归遍历 对于二叉树T,可以递归定义它的先序遍历,中序遍历和后序遍历 PreOrder(T) = T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树) InOrder(T) = InOrder(T的左子树)
阅读全文
摘要:写在前面的一些杂谈 reference to 'next' is ambiguous//出现该错误的原因一般是因为代码中出现了关键字,使得编译器无法正常编译 对于一个完全二叉树来说,其第k个节点下的左右节点分别是2k和2k+1,同理可以不严谨的推断出对于一个完全n叉树来说,其第k个节点下的子节点的编
阅读全文
摘要:各个语言较为通用的一套规则 反斜杠+想要实现转义功能的首字母就是转义字符 当自附中包含反斜杠,单引号和双引号等又特殊用途的字符时,必须使用反斜杠对这些字符进行转义(转义就是字面意思,转换一个含义) 反斜杠\\ 单引号' 双引号" 当字符中包含换行,回车,水平制表符或退格等无法直接表示的特殊字符时,也
阅读全文
摘要:python中的输出函数 注意不是C中的printf 起作用就是将希望输出的内容输出在IDLE或标准的控制台上 python解释器将代码翻译成及其能听懂的语言,从而实现代码的实现 print的输出内容可以是数字,可以是字符串,可以是含有运算符的表达式 print(520)//输出数字,数字整型浮点型
阅读全文