为大作业编写简单的shell脚本
为大作业编写简单的shell脚本起因对大作业选择刷100道leetcode的同学,老师的要求是
把100段代码和解释心得贴到一个md文档或其它格式文档。比如cat *.cpp>ans.md
然而,一来呢,我并没有在文件内标注题目和题干,这样做会分不清哪题是哪题;二来呢,把代码直接输入到markdown文档中显示会很丑(因为没有写代码框)
所以我现学现卖,上网查了查shell脚本的语法,看着还行,就决定自己编写一个脚本来处理这个问题
目标
由于题目写在文件名里,所以应该是先输出文件名再输出文件内容
文件的内容应该是按照题号排序的
对文件的内容进行标注,即放在代码块里
由于题目数量还在更新,所以应该在文件开头标注日期和题目数
实现思路删除之前的answer.md->获得当前日期和目录下的cpp文件数目,写入answer.md->扫描当前目录->对每一cpp个文件,先输出文件名->然后加上代码框,即开头加上```cpp->输出文件内容(遍历每一行并输出)->在每个文件末尾追加```作为代码框的结束
代码及注释123456789101112131 ...
leetcode刷题记录
0001e7cc119baf07f6562345daa1256f63b6b607add44554a18e654b45236b6b5f902fcf7b660c2301a89e3dbdc3b4c749285e8b75405d62d5c366d01b6fbce05de9c31d9ecef46c9fb3bf20acec7364442e7dc49ba60b8aded79c29d2f37842ce78e5dbe4fa6ca9ab4ca9df36e458391e5910ab3cb2b4558cb4badc89e914f33aac363028136b0d4952cfd526d951f400c9341d7282dfa9dcd80b6c75899ca63176e2fd9e4dc1d5177971f5277315d1e375c255b8ebf55c83a18bbb18019385d94d02d37df98932dbcbef2a14e137241bd37e2ca7fa0a0056013cc794ca83adbe771d9188333849aa4cf2d040451f6b55c2c1aa61a6c2001 ...
期末pre——回溯的剪枝策略
期末pre——回溯的剪枝策略做题分析
因为很多算法还没学过,做得最多的困难题就是回溯和动态规划了,不过我也不太会动态规划,解决的方法通常是回溯+剪枝,在做题的过程中,我发现回溯+剪枝可以解决很多的动态规划问题,而且写起来比较容易
回溯介绍
回溯搜索是深度优先搜索(DFS)的一种,通俗地讲,回溯法采用的思想是“一直向下走,走不通就掉头”,类似于树的先序遍历。dfs和回溯法其主要的区别是:回溯法在求解过程中不保留完整的树结构,而深度优先搜索则记下完整的搜索树。
回溯的基本思想是:为了求得问题的解,先选择某一种可能的情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解
回溯是搜索算法中的一种控制策略。
未经剪枝的回溯将探索所有合理的解空间,因此复杂度也会比较高,比如N皇后问题的复杂度就达到了O(N!)
回溯的模板
123456789101112131415全局变量 ansvoid solve(深度){ if(满足条件) 保存解 else { for(可以进行的操作) { 保存结果 ...
博客建站历程与复现
博客建站历程与复现说明从输入公网IP,看到第一篇Hello World 到现在,已经有六十余天了
在这六十多天里,我也对博客进行了许多许多的更新
趁现在还记得,我想把我的博客建站历程记录下来,便于以后查看
同时,也希望它可以作为一篇教程。为此,我开了一个临时的阿里云ECS服务器,尝试对整个过程进行复现
准备工作首先要有一台服务器,也有人选择先在本地写好页面之后托管到一些平台,比如gitee,github
但是这可能受到服务商的限制,还有可能被审查而关停,为什么好好的博客被Gitee服务直接关停了? - 知乎
由于可能在无意中就出现了什么禁词,导致连怎么修改都不知道,所以建议还是自己搞一台服务器
像是阿里云,腾讯云这些老牌的云服务器提供商会有针对学生和新用户的优惠,至少前几年花不了太多钱的
另外,他们还提供了几个月的试用服务,在这里可以白嫖一个月的阿里云服务器
我下面的操作都是在对一台即将到期的ecs服务器初始化后进行的,可以认为是一个纯净的系统
远程连接ecs并安装必要的工具购买完ecs服务器后,可以进入控制台,设置密码后进行远程连接,之后会进 ...
诚耀百廿 雄创一流
南京大学120周年校庆,邀您共襄盛举
很庆幸在大一经历南京大学120校庆,也没有因临近期末繁重的学习任务错过这些活动
南京大学120周年校庆公告
薪火相续,源远流长。南京大学的历史可溯源至创立于1902 年的三江师范学堂。此后历经两江师范学堂、南京高等师范学校、国立东南大学、第四中山大学、国立中央大学、南京大学等历 史 时期;至1952年,创立于1888年的金陵大学并入,二源汇流,波澜壮阔,在新中国高等教育的发展历程中砥砺奋进、铸造辉煌,始终走在中国大学的第一方阵,为中华民族培育了一批又一批栋梁人才。
民族复兴,使命担当。近代以来,家国多舛,南京大学虽校名屡易、校址迁移,然学脉绵延、弦歌不绝,始终与时代同呼吸、与民族共命运,谋国家之富强、求科学之进步。在社会主义建设和改革开放的征程中,南京大学倡导解放思想,勇攀科学高峰,跃入顶尖大学行列。进入新时代,南京大学努力推进“双一流”建设,聚力内涵式发展、着力高质量提升,在培育英才、创新知识、传承文化、服务国家等方面,引领新风尚、树立新标杆,向党和人民交出了优异的成绩单,向“第一个南大”的宏伟目标迈出了坚实的步伐。 ...
week14_readme
今日c++学习心得理论课学习了关联容器的有关内容关联容器支持高效的关键字查找和访问,主要有map和set两类map中储存键-值对,可以高效地通过关键字查找值,而set只保存关键字,支持高效的关键字查询他们都可以选择可重复(multi)和无序(umordered_)的前缀,所以一共有2^3=8种关联容器有序保存的关联容器底层是红黑树,无序保存的关联容器底层是哈希函数相比之下,无序储存效率更高,因此,如果不严格要求一直有序,最好选择无序储存关联容器是根据关键字存储的,所以不支持顺序容器的push_back等位置相关的操作作为有序容器的关键字的类型必须定义了元素比较的方法,即严格弱序;作为无序容器关键字则要定义相等关系map类型的元素是pair,pair有两个public成员,分别是first和second,可以用点运算符获得或者用关联容器的迭代器的箭头运算符得到,即it->first和it->second一些泛型算法可以用于关联容器,但通常是一个坏主意,因为它们定义了更高效的成员函数版本的算法向map类型插入元素可以用insert函数,更直观的是用下标运算符和at() ...
week13_readme
今日c++学习心得理论课今天学习了泛型算法(generic algorithm),是定义在头文件algorithm里的之所以叫泛型算法,是因为它们可以用于不同类型的元素和多种容器类型,也就是说不依赖于容器算法不直接操作容器,所以永远不会改变底层容器的大小,但是可以改变元素顺序算法都需要接受一对迭代器表示范围(左闭右开的),以及一些其他参数算法不检查写操作,保证过程安全是程序员的责任(目的位置要足够大)算法通常提供了重载默认运算符的方法,可以通过传递一个谓词实现但是,谓词只能接受特定的一个或两个参数,如果还需要更多的参数,就要用到lambda表达式lambda表达式是一个可调用对象,有一个返回类型,一个参数列表,一个函数体和捕获列表捕获列表是lambda所在函数中定义的局部变量,如果要指定返回类型,需要使用尾置返回lambda可以出现在函数中,并使用明确指明的局部变量捕获方式有值捕获和引用捕获,还可以使用隐式捕获还可以用bind函数实现类似的功能,特别地,bind可以自定义传参的顺序迭代器分为插入迭代器,流迭代器和反向迭代器算法形参模式有以下四种
alg(beg, end, oth ...
基本计算器
实现一个基本计算器题源:LeetCode224,LeetCode227,LeetCode772其中,第772题是这类题的终极版(不包括自定义运算符的题)也就是说,它的解法——双栈法,可以作为这类题的通解
下面我们来看具体的题目为了说明这个解法,我们先把目光投到人类是如何处理一个算式的小学我们就知道,计算的关键是处理好优先级,即先算括号里的内容,再算乘除法,最后算加减法由于运算符是左结合的,如果优先级相同,就从左向右算比如1-(5+1)/2+2*3这个算式,我们先计算5+1=6,然后算6/2=3,2*3=6,最后算1-3=-2,-2+6=4发现没有可以算的东西了,就知道答案是4其实我们编程计算的思路基本上也是与之一致的别急,先从简单的地方看起
第一种情况——只有加减号(或者只有乘除号)这可就好了,此时没有优先级的干扰,只考虑结合律,也就是从左向右算比如1+2-3+4,扫描到1和+并保存,接着扫描到2,我们就立即计算1+2=3并保存然后扫描到-和3,计算3-3=0并保存,最后扫描到+和4,计算0+4=4并保存,接着发现扫描结束,那4就是答案代码如下
12345678910111 ...
week12_readme
今日c++学习心得理论课学习了QT图形界面的相关知识Qt的图形用户界面的基础是QWidget。Qt中所有类型的GUI组件如按钮、 标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了 自身显示在屏幕上。每一个GUI组件都是一个widget,widget还可以作 为容器,在其内包含其他Widget。QWidget不是一个抽象类别。并且可以被放置在一个已存在的用户界面中;若是Widget没有指定父Widget,当它显示时就是一个独立的视窗、 或是一个顶层widget。QWidget显示能力包含了透明化及Double- Buffering。Qt提供一种托管机制,当Widget于创建时指定父对象,就可把自己的生命周期交给上层对象管理,当上层对象被释放时,自己也被释放。确保对象不再使用时都会被删除Qt的容器类比STL中的容器类更轻巧安全易于使用顺序容器QList,QLinkedList,QVector,QStack,QQueue.关联容器QMap,QMultiMap,QHash,QMultiHash, ...
week11_readme
今日c++学习心得理论课本周学习了顺序容器的相关知识顺序容器包括vector,deque,list,forward_list,array和string选择容器的基本原则
除⾮你有很好的理由选择其他容器,否则应使⽤vector。 如果你的程序有很多⼩的元素,且空间的额外开销很重要,则不要使⽤list或forward_list。 如果程序要求随机访问元素,应使⽤vector或deque。 如果程序要求在容器的中间插⼊或删除元素,应使⽤list或forward_list。 如果程序需要在头尾位置插⼊或删除元素,但不会在中间位置进⾏插⼊或删除操作,则使⽤deque。
迭代器范围是左闭右开的,即[begin,end)除array外,容器的默认初始化都使之成为一个空容器可以使用拷贝初始化和列表初始化,特别地,拷贝初始化还可以传入一对迭代器,初始化为指定范围内的拷贝这种情况下,两个容器的类型未必是相同的,只要元素可以相互转换就可以了与之类似,顺序容器还提供了assign操作,允许从一个不同但相容的容器赋值,但要注意传入的参数不能指向自身例如常用的set去重方式
123vector& ...