ACM队内Rating赛题解报告(一)
CF879A - Borya’s Diagnosis题目描述It seems that Borya is seriously sick. He is going visit n doctors to find out the exact diagnosis. Each of the doctors needs the information about all previous visits, so Borya has to visit them in the prescribed order (i.e. Borya should first visit doctor 1, then doctor 2, then doctor 3 and so on). Borya will get the information about his health from the last doctor.
Doctors have a strange working schedule. The doctor i goes to work on the si-th day and works ever ...
浅谈Java面向对象三大特性:封装、继承和多态
前言😁最近系统的梳理了一下Java的基础知识,面向对象无疑是Java的一大特色。
😉提到C语言我们会想到面向过程,提到Java我们不免想到面向对象。
❓细心思考,面向对象到底是什么呢?
😃C语言的基本组成单位是函数(Function),我们把问题拆分成若干个小问题,通过顺序、选择、循环结构解决这些问题的过程叫做面向过程。
😋Java的基本组成单位是类(Class),万物皆是对象,对象有它的属性和方法。对象映射现实中的事物,我们通过对象之间的关系来描述事物之间的联系,这种思想就是面向对象。它最大的特点就是抽象。因而不好理解,需要通过实践才能体会到面向对象的优势所在。
面向对象类类的概念😁类是面向对象的特色。万物皆是对象,我们通常把某一类事物的共同特点抽象出来,它们组成了类。
🤣类是对某一类事物特点的抽象,这些定义有些晦涩难懂,我们不妨举一个例子:
🐾自行车、汽车、火车,它们是三个不同的对象。
🛒它们都是交通工具,既然是交通工具,都有速度。当然,也有自己的外观,如颜色。这是它们的属性。
🎉除此之外,它们的功能有:前进、刹车。这是它们的方法。
🎡如图所示,交通工具就是 ...
C语言实训 - 万年历(包括公农历转换)
项目需求分析项目需求1.日历显示:显示一年日历,包括阳历、阴历、节气等信息。
2.日历查询:查询某年、某月日历。
3.设置备忘录:记录某天的行程、事项等备忘信息,以备查询。
4.行程提醒:可设置未来某一天的任务安排。
项目背景
万年历是人们日常生活不可或缺的部分。
电子万年历可以使人们生活更加便利。
万年历的备忘录功能提高了人们的生活效率。
万年历的需求容易理解。
万年历模块化程度很高,并且模块之间的联系清晰明了。
C语言适合开发字符界面程序和文件读写。
项目介绍开发一套软件系统,实现万年历最常用的功能,以日历为核心,围绕日历实现其查询行程事项、备忘录以及查看某年、某月节日和节气等功能。该电子平台还应具有一定界面友好性,给客户良好的体验,并且具有拓展性,可方便拓展其它功能。
角色
角色名称
功能操作
用户
查看日历、查询某年、某月的日历、设置备忘录、设置行程提醒
程序结构图
业务模块汇总
功能编号
功能简述
功能描述
0
查看日历
查看当月日历
1
查看一年日历
显示当年日历,包括阳历、阴历、节气
2
查询某月、某日的日历
查看某年、某月 ...
一文带你学会进制转换
前言😘进制对学习计算机的人来说应当是非常熟悉的概念。
🐷我们日常生活中使用的是十进制,为什么使用十进制呢?早期人类为了分配物资需要计数,而我们有十个手指头,所以使用十进制最为方便。
🙃十进制,简单的说就是满十进一,基数为0-9。
😁计算机最常使用二进制,因为我们使用的是电子计算机,它通过电平的高低分别表示1和0。
进制转换十进制 -> 其它进制十进制整数 -> 二进制整数二进制是满二进一,我们使用2把十进制拆分。
整数十进制转二进制的方法:除2取余,逆序排列
例如:789 -> 1100010101
789/2=394 余1 第10位
394/2=197 余0 第9位
197/2=98 余1 第8位
98/2=49 余0 第7位
49/2=24 余1 第6位
24/2=12 余0 第5位
12/2=6 余0 第4位
6/2=3 余0 第3位
3/2=1 余1 第2位
1/2=0 余1 第1位
即一直把十进制除以2,直到商为0,然后把余数逆序排列即可。
十进制小数 -> 二进制小数小数十进制转二进制方法:乘2取整,顺序排列
0.625 -> 0 ...
Git和GitHub快速入门指南(五)
分支管理🍃以前我们在学习Git的时候没有提到分支的概念,我们始终在使用一个分支,即Master分支。
😁当多人协同开发时,我们需要完成自己的任务同时不耽误它人开发,每个人都需要有自己的分支。
🐷当我们Debug、实验开发时,我们需要单独一个分支用来修改并测试,稳定后再推送至主分支。
根据以往的流程图,Head即当前版本,它实际指向Master分支,而Master分支指向最新提交的版本:
git switch -c😋现在,我们使用git switch -c命令创建并切换到dev分支:
123Administrator@LAPTOP-89OP7KJM MINGW64 ~/Desktop/LearnGit (master)$ git switch -c devSwitched to a new branch 'dev'
(Head即当前版本指向dev指针,dev指针指向最新版本。)
git branch😝我们可以使用 git branch 命令查看分支(星号后的是当前分支):
1234Administrator@LAPTOP-89OP7KJM MINGW6 ...
Git和GitHub快速入门指南(四)
Git进阶教程撤销修改❓暂存区和工作区到底有什么作用?为什么不能直接把工作区的修改直接commit到仓库?
😁下面,就来看一下,Git的优势所在:
git checkout➕还记得add命令吗,我们使用add命令可以将目前的文件添加到暂存区。
🔐添加到暂存区,相等于在暂存区创建了一份备份。
⚫当我们在工作区修改文件出错想撤回的时候,我们可以直接让暂存区的文件覆盖当前文件。
我们先打开Readme.txt文件查看其中的内容:
❤然后使用git add命令添加到暂存区:
12Administrator@LAPTOP-89OP7KJM MINGW64 ~/Desktop/LearnGit (master)$ git add Readme.txt
⛷添加成功后,我们随意修改Readme.txt中的内容:
📨然后可以使用如下命令,让文件回到使用add添加到暂存区时的状态:
12Administrator@LAPTOP-89OP7KJM MINGW64 ~/Desktop/LearnGit (master)$ git checkout -- Readme.txt
🛴执行命令 ...
Git和GitHub快速入门指南(三)
再次创建新版本✨我们再来创建一个新的版本:
🍗对刚才的txt文件随机删除几个字符,然后使用git status查看状态:
123456789Administrator@LAPTOP-89OP7KJM MINGW64 ~/Desktop/LearnGit (master)$ git statusOn branch masterChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Readme.txtno changes added to commit (use "git add" and/or "git commit -a")
modified: Readme.txt,即检测 ...
Git和GitHub快速入门指南(二)
Git安装✨Git官网下载地址:https://git-scm.com/downloads
官网选择系统对应的版本下载并按默认安装即可。
Git仓库git init(初始化仓库)123Administrator@LAPTOP-89OP7KJM MINGW64 ~/Desktop/LearnGit$ git initInitialized empty Git repository in C:/Users/Administrator/Desktop/LearnGit/.git/
🎁打开GitBash,切换到目标文件夹。执行git初始化命令。
🎡执行后提示初始化了一个空目录,并且在目录下生成一个隐藏文件夹.git。
🎃这时,我们目标文件夹就是一个仓库(Repository),这个目录里的所有文件都可以被版本控制系统管理。
🍟有了仓库,我们需要创建我们的文件,然后对其进行版本管理。
🥼首先,我们在仓库中新建一个文本文档,命名为“Readme.txt”,并向其写入如下内容:
12This is the first line in the Readme.txtWe will lear ...
Git和GitHub快速入门指南(一)
前言📚新买的Mac mini到了,如何解决在家台式机开发和在外笔记本开发代码不同步的问题?Github解决你的一切烦恼,一直都是自己开发,好久没用过Git了,故作此篇,系统的梳理下Git的知识,留给后人参考。
❓为什么要写这篇Git和GitHub快速入门指南?
🙋首先,系统的梳理下Git使用方法。
🙋其次,也是最重要的一点,网上教程鱼龙混杂,有的像参考文档一样,面面俱到,让人头昏脑胀。还有一部分过于精简,让新手迷失了方向。更有甚至直接从各大博客直接Copy。这让我初学Git时很迷茫,为了帮新人尽量少走弯路,写了这篇博客。
❗如果你只是想简单了解下GitHub使用方法,并不想管理自己的项目,请跳过前面的部分。
Git简介🌈Git是一种分布式版本控制系统。
🐾For example:
假如你们公司需要开发一款游戏,而你负责设计游戏的逻辑,你的同事们分别担任了设计游戏人物、游戏地图等任务,你们都需要完成自己的一部分任务,最终整合在一起。
你在开发过程中,需要同事写的地图用来测试你设计的游戏逻辑。这时候你需要让同事把他写的代码发给你,然后你再想想你这期间都写了什么代码,把同事的代码 ...
Pwn之栈溢出漏洞利用详解
栈溢出简介栈的概念🖥栈是汇编语言中的一种数据结构,遵循LIFO(Last in Fist Out)原则,即后进先出。
🚍栈的主要操作:压栈(Push)、出栈(Pop)。
📌注意:栈从高地址向低地址存储。
栈溢出原理🎈栈溢出是缓冲区溢出的一种。
🈳栈溢出指向某个变量写入的数据超过其申请的内存空间大小,从而覆盖相邻栈的数据。
🔐我们可以通过这种覆盖相邻栈操作去覆盖函数返回地址从而劫持程序到我们想执行的地方。
函数调用原理图📚想要学会Pwn和最简单的栈溢出,必须熟练掌握函数调用在汇编中的实现过程。
🔗我们目前使用的C语言编写的漏洞程序一般使用栈传递参数。
即调用函数前先将参数从右到左的顺序压入栈中。
具体存储结构图如下:
🔔High Address(高地址):栈底,最先入栈,最后出栈。
🔔Low Address(低地址):栈顶,最后入栈,最先出栈。
栈底是调用者保存的寄存器数据。调用函数前,我们需要将原来存放在EAX、ECX、EDX等寄存器中的值保存起来,以便被调用函数使用寄存器的同时不会造成原来的数据丢失,被调函数返回后只需从栈中取回数据即可。
紧接着是参数,我们 ...