- 博客(348)
- 收藏
- 关注
原创 1027 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
2024-10-22 10:11:49
253
原创 动态链接共享内存---动态链接器如何判断某个共享库已经加载进内存?
某个程序A在运行时将libc.so加载进了内存,现在程序B要运行(程序B同样依赖libc.so),那么流程是这样的:1.动态链接器先自举2.链接器装载程序B需要的动态库3.重定位在2中,链接器发现需要装载libc.so,但是现在libc.so已经在内存中了,不需要再重新从磁盘中装载了。
2024-10-22 09:43:24
537
1
原创 程序员的自我修养-感悟
读完这本书,尤其对于程序的“链接、装载和库”三个主题会有更深的理解,不仅能够探究到每个实现机制“怎么做”,作者也尽力把每一个细节抽丝剥茧呈现给我们,从而也帮助我们理解这些实际的机制“为什么会这样做”。精读此书,并仔细推敲程序运行背后的机制和由来,就是程序员的一种内力“修炼”和修养提升。CPU体系结构、汇编、C语言(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如同少林寺的《易筋经》,是最为上乘的武功;学会了编程“易筋经”,大师们可以任意开发操作系统、编译器,甚至是开发一种新的程序设计语言!
2024-09-18 09:12:18
345
1
原创 《计算机网络自顶向下》Wireshark实验 Lab1 Getting Started
这个Lab1 主要就是让你把wireshark工具下载安装,熟悉了解一下wireshark工具的用户界面以及简单使用。我这里选择下载的是8.0PDF版本,利用pdf自带的翻译功能,也是比较便于做实验。并且我们在过滤器中填写http 过滤其他的协议 找到我们发出的get 命令报文。最下面的就是报文传输的相关内容了 我们的Lab1也就结束了。然后我们在浏览器中输入实验手册中给的URL。安装过程比较简单,一路选择默认安装即可。Lab官网 获取Lab文档。各位下一个Lab再见。
2024-09-14 12:34:17
690
原创 69. x 的平方根
给你一个非负整数x,计算并返回x的。由于返回类型是整数,结果只保留,小数部分将被不允许使用任何内置指数函数和算符,例如或者x ** 0.5。x = 42x = 828 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
2024-09-08 10:22:38
179
原创 524. 通过删除字母匹配到字典里最长单词
给你一个字符串s和一个字符串数组dictionary,找出并返回dictionary中最长的字符串,该字符串可以通过删除s中的某些字符得到。如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。"apple""a"
2024-09-07 15:21:55
309
原创 680. 验证回文串 II
给你一个字符串s可以从中删除一个字符。请你判断s是否能成为回文字符串:如果能,返回true;否则,返回false。s = "aba"trues = "abca"true你可以删除字符 'c'。
2024-09-07 14:20:26
191
原创 76. 最小覆盖子串
给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。tts"BANC"最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"a"整个字符串 s 是最小覆盖子串。""t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。
2024-09-04 19:25:18
429
原创 142. 环形链表 II
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(如果pos是-1,则在该链表中没有环。pos,仅仅是为了标识链表的实际情况。链表。返回索引为 1 的链表节点链表中有一个环,其尾部连接到第二个节点。返回索引为 0 的链表节点链表中有一个环,其尾部连接到第一个节点。返回 null链表中没有环。
2024-09-04 16:23:32
628
原创 88. 合并两个有序数组
给你两个按排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你nums2到nums1中,使合并后的数组同样按排列。最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。需要合并 [1,2,3] 和 [2,5,6]。合并结果是 [,2,,5,6] ,其中斜体加粗标注的为 nums1 中的元素。[1]
2024-09-04 15:34:19
327
原创 167. 两数之和 II - 输入有序数组
给你一个下标从开始的整数数组numbers,该数组已按,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是和,则。以长度为 2 的整数数组的形式返回这两个整数的下标index1和index2。你可以假设每个输入,而且你重复使用相同的元素。你所设计的解决方案必须只使用常量级的额外空间。27[1,2]2 与 7 之和等于目标数 9。因此 index1 = 1, index2 = 2。返回 [1, 2]。2,3,4[1,3]2 与 4 之和等于目标数 6。
2024-09-04 15:03:46
623
原创 122. 买卖股票的最佳时机 II
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。
2024-09-03 16:01:59
172
原创 763. 划分字母区间
给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。[10]
2024-09-03 15:26:54
700
原创 452. 用最少数量的箭引爆气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组points,其中表示水平直径在xstart和xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为startend, 且满足end,则该气球会被。可以射出的弓箭的数量。弓箭一旦被射出之后,可以无限地前进。给你一个数组points返回引爆所有气球所必须射出的弓箭数。
2024-09-02 15:59:12
532
原创 605. 种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组flowerbed表示花坛,由若干0和1组成,其中0表示没种植花,1表示种植了花。另有一个数n,能否在不打破种植规则的情况下种入n朵花?能则返回true,不能则返回false。truefalse。
2024-09-02 14:40:35
419
原创 435. 无重叠区间
给定一个区间的集合intervals,其中。返回需要移除区间的最小数量,使剩余区间互不重叠。1移除 [1,3] 后,剩下的区间没有重叠。2你需要移除两个 [1,2] 来使剩下的区间没有重叠。0你不需要移除任何区间,因为它们已经是无重叠的了。
2024-09-01 17:00:28
378
原创 135. 分发糖果
虽然这一 道题也是运用贪心策略,但我们只需要简单的两次遍历即可:把所有孩子的糖果数初始化为 1。再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数 不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。这里的贪心策略即为,在每次遍历中,只考虑并更新相邻一 侧的大小关系。先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加 1。你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。,第一次遍历更新后的结果为。
2024-09-01 16:03:24
299
原创 455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果,我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。1你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。所以你应该输出 1。2。
2024-09-01 15:25:02
330
原创 1025 反转链表
给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。
2024-08-28 16:06:36
630
原创 CSAPP:Lab3 -AttackLab-Level2
同level1一样,利用缓冲区溢出,getbuf返回地址要修改,可以利用getbuf创建的40字节缓冲区,将栈顶地址即%rsp的内容,放到getbuf()的返回地址处,然后我们自己构造的三行汇编代码字节序列,放在%rsp栈顶位置处,当getbuf()返回时,返回到图中%rsp指示的位置,然后执行我们自己构造的汇编代码,该汇编代码跳转到touch2()执行。查看getbuf()代码,我们要获取执行getbuf时的%rsp栈顶位置值。剩下的问题变成了,将该汇编代码字节序列放在什么位置。来完成字符串漏洞攻击。
2024-08-27 21:03:23
632
原创 CSAPP:Lab3 -AttackLab-Level1
关于测试环境的问题,也许是不同虚拟机环境不同,导致实验程序的兼容性出现了问题,如下图,我按照实验手册中说明的控制台进行输入的方法测试,没有办法进行输入,直接会报错。的开始地址,放在某个位置(test进行call getbuf()指令前,要将该指令的下一指令地址压栈,此时的压入栈帧中的位置,就是我们要修改的位置),以实现当。代码开始通过$rsp-40创建了40个字节的栈帧空间,然后将栈顶地址赋给rdi,调用Gets()进行输入,输入字符放到此40字节的缓冲区中。验证过,是可行的,如下图。
2024-08-27 18:22:45
1033
原创 1024 科学计数法
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9][0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
2024-08-27 11:22:34
458
原创 1023 组个最小数
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。
2024-08-26 21:03:24
181
原创 1021 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
2024-08-26 20:16:58
350
原创 1020 月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
2024-08-26 11:13:12
478
原创 CSAPP:Lab2 -BombLab-01
重点关注esi寄存器,因为我们在phase_2中是将立即数 0x402400传入esi寄存器,在strings_not_equal函数关注第4和第5行代码,这里一个是我们通过终端输入字符串,字符串首地址在rdi寄存器中,一个是代码中地址0x402400的字符串,这里主要是比较这两个函数的字符穿内容是否相同,如果相同就返回0,不同则返回1(代码逻辑不难,大家可以自行研究下),所以我们通过gdb,x/s 0x402400,可以查询到该地址处的内容,如下图所示,这也就是我们第一关的答案。找到phase_1函数。
2024-08-25 21:22:18
785
原创 1019 数字黑洞
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
2024-08-25 12:01:20
351
原创 1018 锤子剪刀布
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
2024-08-25 10:19:37
147
原创 1017 A除以B
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
2024-08-25 10:02:02
183
原创 1016 部分A+B
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。现给定 A、DA、B、DB,请编写程序计算 PA+PB。
2024-08-25 09:46:19
281
原创 CSAPP:Lab1 -DataLab
关于vscode的安装和配置,以及ssh插件安装和配置,大家可以网上搜一下,有很多这方面的教程,如果大家有环境弄不明白的,也欢迎私信我。实验开始前,先阅读下README文档,我们主要的工作就是编辑bits.c源文件中的各个函数,每次修改完源文件,要通过make btest进行编译,然后通过./dlc -e bits.c来检查源文件的合法性,最后通过运行./btest 检测我们写的函数功能是否通过。如下图,如果函数功能通过,会显示得分,不通过,会给出每个函数的错误信息。如下是我搭建的实验环境。
2024-08-20 20:13:38
835
原创 1012 数字分类
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。若分类之后某一类不存在数字,则在相应位置输出。
2024-08-14 21:29:42
433
原创 1015 德才论
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
2024-08-14 21:26:01
688
原创 1008 数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
2024-08-13 10:50:49
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人