【2022每日分享day08】《正则表达式必知必会》
河北大学2022寒假萌新程序设计训练每日知识分享-day08
每日分享——《正则表达式必知必会》正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。
【2022每日分享day07】《代码整洁之道》
河北大学2022寒假萌新程序设计训练每日知识分享-day07
每日分享——《代码整洁之道》《代码整洁之道》讲述了一系列行之有效的整洁代码操作实践。软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。《代码整洁之道》提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,这些实践在《代码整洁之道》中体现为一条条规则(或称“启示”),并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。
【2022寒假精进训练-2】7-9 还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。
输出格式:输出为一个整数,即该二叉树的高度。
输入样例:1239ABDFGHIECFDHGIBEAC
输出样例:15
思路首先根据先序和中序序列还原二叉树。然后求树的高度。
还原二叉树的难点应该是在确定递归还原二叉树的左右子树时的参数上。如果用个数确定的话容易乱,可以采用差值的方法。比如此题里面,用ij对应pre,lr对用mid,用idx表示root节点在mid中的位置。当还原左子树时,mid序列的位置很好写,就是l->idx-1,pre肯定是从i+1->某一个位置x,可以利用差值 x-(i+1)=idx-1-l,很方便的得到x=idx-l+i。右子树的边界如果确定复杂的话也可以用这个方法。
代码1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
【2022寒假精进训练-2】7-7 彩虹瓶
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。
假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取下来装填,否则去工厂里再搬一箱过来。
如果工厂里发货的顺序比较好,工人就可以顺利地完成装填。例如要按顺序装填 7 种颜色,工厂按照 7、6、1、3、2、5、4 这个顺序发货,则工人先拿到 7、6 两种不能装填的颜色,将其按照 7 在下、6 在上的顺序堆在货架上;拿到 1 时可以直接装填;拿到 3 时又得临时码放在 6 号颜色箱上;拿到 2 时可以直接装填;随后从货架顶取下 3 进行装填;然后拿到 5,临时码放到 6 上面;最后取了 4 号颜色直接装填;剩下的工作就是顺序从货架上取下 5、6、7 依次装填。
但如 ...
【2022寒假精进训练-2】7-6 前世档案
网络世界中时常会遇到这类滑稽的算命小程序,实现原理很简单,随便设计几个问题,根据玩家对每个问题的回答选择一条判断树中的路径(如下图所示),结论就是路径终点对应的那个结点。
现在我们把结论从左到右顺序编号,编号从 1 开始。这里假设回答都是简单的“是”或“否”,又假设回答“是”对应向左的路径,回答“否”对应向右的路径。给定玩家的一系列回答,请你返回其得到的结论的编号。
输入格式:输入第一行给出两个正整数:N(≤30)为玩家做一次测试要回答的问题数量;M(≤100)为玩家人数。
随后 M 行,每行顺次给出玩家的 N 个回答。这里用 y 代表“是”,用 n 代表“否”。
输出格式:对每个玩家,在一行中输出其对应的结论的编号。
输入样例:123453 4ynynyynynyyn
输出样例:12343562
思路可以看成是一个完全二叉树,左子树就当前节点的编号乘以2,右子树就当前节点的编号乘以2再加上1。得到编号后减去前面的非叶子结点的个数就是答案。
代码1234567891011121314151617181920212223242526#include <iostream> ...
【2022寒假精进训练-2】7-10 关于堆的判断
将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:
x is the root:x是根结点;
x and y are siblings:x和y是兄弟结点;
x is the parent of y:x是y的父结点;
x is a child of y:x是y的一个子结点。
输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入一个初始为空的小顶堆的整数。之后M行,每行给出一个命题。题目保证命题中的结点键值都是存在的。
输出格式:对输入的每个命题,如果其为真,则在一行中输出T,否则输出F。
输入样例:1234565 446 23 26 24 1024 is the root26 and 23 are siblings46 is the parent of 2323 is a child of 10
输出样例:1234FTFT
思路首先简单介绍一下堆。堆是一个用数组实现的完全二叉树,从叶子到根是有序的。将根结点最 ...
【2022寒假精进训练-2】7-8 后缀式求值
我们人类习惯于书写“中缀式”,如 3 + 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +现在,请对输入的后缀式进行求值。
输入格式:在一行中输入一个后缀式,运算数和运算符之间用空格分隔,运算数长度不超过6位,运算符仅有+ - * / 四种。
输出格式:在一行中输出后缀式的值,保留一位小数。
输入样例:13 5.4 2.2 * +
输出样例:114.9
思路每一个运算符要计算他前面紧按着他的两个操作数,这个操作数可以是表达式的值。
可以用一个stack来存储运算数,每遇到一个运算符,就从栈顶拿来两个运算数(注意顺序,最上面的应该是操作数2,比如ab-,b是操作数2,转换成中缀就是a-b),然后再将计算结果压入栈顶。
最后将栈里唯一元素输出即可。
代码123456789101112131415161718192021222324252627#include <iostream>#incl ...
【2022每日分享day06】程序员专用笔记神器-markdown以及Typora
河北大学2022寒假萌新程序设计训练每日知识分享-day06
每日分享——程序员专用笔记神器-markdown以及Typoramarkdown语法简易,用于编辑文本文档,可快速的定义目录、写入数学公式、表格、代码块等,语法非常简单。文件后缀为.md目前许多网站使用markdown来撰写帮助文档或是用于论坛发表文章(csdn、博客园、github等)程序员必定接触github,接触github就必定要使用markdown
Typora是一款非常nice的markdown编辑器,像使用word一样编辑markdown代码(其实不用写代码),1.0之后的版本开始收费了,虽然和其他收费软件相比价格并不贵,但还是可以做到不花钱使用的,下载之前的旧版本即可,并可以设置取消更新提示,这样就能愉快地使用了。这里是用Typora写的一个笔记:
取消更新提示地步骤:
【2022每日分享day05】LeetCode-技术成长平台
河北大学寒假萌新程序设计训练每日知识分享-day05
每日分享——LeetCode-技术成长平台力扣(LeetCode) https://leetcode-cn.com/力扣是一个全球极客挚爱的技术成长平台,致力于帮助程序员们学习算法知识、训练算法题目,以提升自身技术能力、斩获 Dream Offer。力扣上的题目偏求职面试风格,题目难度分简单、中等、困难三个等级,力扣的题解版块汇集了各路算法大神的解题思路,优秀的题解不少,非常值得一看。
除此之外,力扣周赛 / 双周赛是全球同步的算法比赛,可以与全球的小伙伴一决高下。每次比赛结束后都会有一个全球 / 全国排名。在比赛结果页面还可以去学习一下大神们的解题思路,开拓算法思维。每场比赛共有四道题目,比赛时间为 1 小时 30 分钟。每题各种各样复杂度的算法都出现在比赛中。此外,对 Bug Maker 非常友好,在比赛时能告诉你哪个(非样例)点错了。
【2022每日分享day04】C++常用位运算知识
河北大学寒假萌新程序设计训练每日知识分享-day04
每日分享——C++常用位运算知识任何信息在计算机中都是采用二进制表示的,数据在计算机中是以补码形式存储的,位运算就是直接对整数在内存中的二进制位进行运算。由于位运算直接对内存数据进行操作,不需要转换成十进制,因此处理速度非常快,在信息学竞赛中往往可以优化理论时间复杂度的系数。同时,一个整数的各个二进制位互不影响,利用位运算的一些技巧可以帮助我们简化程序代码。