- 博客(222)
- 收藏
- 关注
原创 设计模式-工厂模式
本文系统地介绍了工厂模式的设计原理与实现方式。首先分析了直接创建对象的四大隐患:紧耦合、创建逻辑分散、扩展性差和类型判断负担。然后详细阐述了三种工厂模式:简单工厂模式(集中管理产品创建,但违反开闭原则)、工厂方法模式(通过多态实现产品创建,符合开闭原则)和抽象工厂模式(创建产品族,确保兼容性)。每种模式都配有完整的C++代码示例,并分析了优缺点及适用场景。工厂模式的核心价值在于将对象创建与使用分离,通过封装变化提高代码的灵活性、可维护性和扩展性,特别适用于需要频繁创建对象的复杂系统。
2025-09-19 09:30:00
784
原创 MySQL-索引
摘要:索引是数据库用于加速查询的数据结构,主要有哈希索引、全文索引和B+树索引三种类型。B+树索引因其高效的范围查询和排序能力成为最常用的索引方式。索引的优点包括提高查询速度、减少I/O操作,但会占用存储空间并增加维护成本。使用索引时需注意索引失效情况,如OR条件、LIKE模糊查询、函数操作等。设计索引时应遵循最左前缀原则,合理选择索引列顺序,并考虑使用覆盖索引和前缀索引优化性能。聚簇索引将数据与索引存储在一起,而非聚簇索引则需要二次查找,两者各有优缺点。
2025-09-18 09:30:00
1019
原创 既然有了malloc/free,C++中为什么还需要new/delete呢?
而malloc/free作为库函数,仅是已编译的底层内存操作代码,无法将构造/析构的逻辑整合进去,仅能完成单纯的内存分配与释放,无法处理对象完整的生命周期。此外,new返回的是对应类型的指针,无需显式类型转换,还提供了new[]/delete[]专门处理数组对象,并且支持重载以实现自定义内存管理策略,这些都是malloc/free无法实现的,使得new/delete能让C++更安全、自然地管理对象。
2025-08-29 23:52:58
227
原创 实现多态的三个必要条件?
这三个条件的关系是:继承提供了类的层级基础,方法重写定义了行为差异,父类引用指向子类对象则触发了动态绑定,三者共同实现了多态 “一个接口,多种实现” 的核心特性。
2025-08-27 23:42:39
332
原创 操作系统概述
操作系统(OS)是管理计算机硬件与软件资源的系统软件,充当用户与硬件之间的桥梁。其主要目的是高效管理硬件资源、提供统一接口、保障系统安全稳定。核心功能包括硬件资源管理、应用程序运行平台和用户交互(GUI/CLI)。操作系统具有并发性、共享性、虚拟性等特征,发展历程从批处理到现代分布式、AI赋能的智能系统。按设备可分为桌面、移动、服务器和嵌入式四类。运行机制基于内核态/用户态隔离,通过进程管理、内存管理、中断处理等机制实现资源调度。操作系统是计算机系统的"神经中枢",没有它硬件无法协同工作
2025-08-26 09:30:00
955
原创 如何通过虚函数实现多态?
的技术,该技术的核心是虚函数表。首先在基类中用 virtual 关键字声明虚函数,编译器会为该类及子类生成专属的 “虚函数表(vtable)”,且每个实例化对象会隐藏一个 “虚表指针(vptr)”,指向所属类的虚函数表;接着让子类重写基类虚函数,并通过基类指针或引用指向子类对象;当调用虚函数时,程序不会在编译期绑定函数,而是在运行期通过对象的 vptr 找到对应类的 vtable,取出重写后的虚函数地址执行。最终实现 “同一接口,不同实现” 的多态效果。C++ 中多态的实现使用的是。
2025-08-25 23:39:59
392
原创 如何理解面向过程和面向对象,举例说明一下?
面向过程和面向对象是两种不同的编程思想,核心区别在于解决问题的视角不同:前者关注 “步骤和过程”,后者关注 “对象和交互”。是把问题拆解成多个 “对象”(每个对象包含自身的数据和操作方法),通过对象之间的交互完成任务。是把问题拆解成一系列步骤,通过函数实现每个步骤,然后按顺序调用这些函数,最终完成任务。洗番茄、切番茄(函数 1:处理番茄)放番茄、加盐翻炒(函数 4:炒番茄)打鸡蛋、搅拌(函数 2:处理鸡蛋)倒油、炒鸡蛋(函数 3:炒鸡蛋)方法:炒鸡蛋、炒番茄、混合菜品。方法:被打碎、被搅拌。
2025-08-22 23:27:23
252
原创 C和C++的区别是什么?
而C++强调类型严格性和工程化,禁止重复定义可以避免隐式的变量共享带来的意外错误(例如不同文件对同一变量的修改可能互相干扰),更适合大型项目的维护。编译器要求全局变量的定义必须唯一,若多个编译单元中出现同名全局变量(无论是否初始化),链接阶段会直接报错 "重定义"。当多个编译单元(.c 文件)中出现同名全局变量时,编译器会认为它们是同一个变量的声明,最终在链接阶段只会为其分配一块内存,多个定义会被合并为一个实例。但C++的类型系统更为严格,它不允许void*类型的指针隐式转换为其他类型的指针。
2025-08-21 10:00:00
915
原创 每日温度(力扣-739)
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。输入: temperatures = [73,74,75,71,69,72,76,73]输入: temperatures = [30,40,50,60]输入: temperatures = [30,60,90]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]
2025-05-30 20:58:19
614
原创 基础知识-指针
本文系统介绍了指针的核心概念与使用。主要内容包括:1.指针基础:定义指针为存储内存地址的变量,区别于普通变量;解释内存地址与指针的关系;2.指针语法:声明与初始化方法、取地址(&)与解引用(*)操作符的使用、空指针概念;3.关键应用:函数参数传递(值传递vs指针传递)、动态内存分配(malloc/new)及结构体指针;4.常见问题:野指针的危害与防范、内存泄漏的解决方案;5.高级特性:指针运算规则、多级指针(二级/三级)、指针数组与数组指针的区别;6.函数指针:定义与使用方法。通过具体代码示例,详细
2025-04-18 21:14:27
1192
原创 基础知识-结构体
本文介绍了结构体的基本概念和应用。主要内容包括:1.结构体类型定义与变量创建,说明了C/C++中结构体的区别;2.结构体字节对齐规则,详细讲解了不同类型成员的对齐方式及位域处理;3.结构体自引用的正确方法,强调必须使用指针而非直接嵌套,并指出typedef重命名的常见错误。文章通过具体代码示例解析了结构体的内存分配机制,并附有字节对齐的练习题,帮助读者理解结构体在内存中的存储方式。
2025-04-17 23:12:06
1021
原创 【例9.8】合唱队形(信息学奥赛一本通-1264)
N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T2,…你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入的第一行是一个整数N(2≤N≤100),表示同学的总数。个整数Ti(130≤Ti≤230)是第i位同学的身高(厘米)。输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。对于全部的数据,保证有n≤100。
2025-04-15 23:26:54
395
原创 登山(信息学奥赛一本通-1283)
五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?第一行:N (2 <= N <= 1000) 景点数;第二行:N个整数,每个景点的海拔。最多能浏览的景点数。
2025-04-14 21:47:32
190
原创 【例9.7】友好城市(信息学奥赛一本通-1263)
每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。第1行,一个整数N(1≤N≤5000),表示城市数。仅一行,输出一个整数,表示政府所能批准的最多申请数。
2025-04-13 18:23:29
332
原创 拦截导弹(信息学奥赛一本通-1289)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹。第二行包含N个整数,为导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数)。第一行是一个整数N(不超过15),表示导弹数。一个整数,表示最多能拦截的导弹数。
2025-04-11 17:41:17
336
原创 【例9.4】拦截导弹(Noip1999)(信息学奥赛一本通-1260)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。第二行:要拦截所有导弹最少要配备的系统数。
2025-04-11 17:40:19
366
原创 怪盗基德的滑翔翼(信息学奥赛一本通-1286)
他希望尽可能多地经过不同建筑的顶部,这样可以减缓下降时的冲击力,减少受伤的可能性。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。第二行包含N个不同的整数,每一个对应一幢建筑的高度h(0<h<10000),按照建筑的排列顺序给出。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。对于每一组测试数据,输出一行,包含一个整数,代表怪盗基德最多可以经过的建筑数量。
2025-04-10 20:20:48
794
原创 【例9.6】挖地雷(信息学奥赛一本通-1262)
在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向大序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任意一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。xiyi //表示从xi可到yi,xi<yi。−kv //挖地雷的顺序。第二行:为依次每个地窖地雷的个数;第一行:地窖的个数;
2025-04-10 18:08:40
404
原创 三角形最佳路径问题(信息学奥赛一本通-1288)
从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。注意:路径上的每一步只能从一个数走到下一层上和它最近的下边(正下方)的数或者右边(右下方)的数。第一行为三角形高度100≥h≥1,同时也是最底层边的数字的数目。从第二行开始,每行为三角形相应行的数字,中间用空格分隔。最佳路径的长度数值。
2025-04-09 10:02:19
493
原创 最低通行费(信息学奥赛一本通-1287)
一个商人穿过一个N×N的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。样例中,最小值为109=1+2+5+7+9+12+19+21+33。后面N行,每行N个不大于100的整数,为网格上每个小方格的费用。第一行是一个整数,表示正方形的宽度N (1≤N<100);
2025-04-08 14:19:16
327
原创 放苹果(信息学奥赛一本通-1222)
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。对输入的每组数据M和N,用一行输出相应的K。
2025-04-08 11:07:04
198
原创 马走日(信息学奥赛一本通-1219)
每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。第一行为整数T(T < 10),表示测试数据组数。马在中国象棋以日字形规则移动。
2025-04-08 10:33:10
367
原创 LETTERS(信息学奥赛一本通-1212)
给出一个row×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。最多能走过的不同字母的个数。接着输出R行S列字母矩阵。
2025-04-08 10:09:19
855
原创 病人排队(信息学奥赛一本通-1183)
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。第1行,输入一个小于100的正整数,表示病人的个数;按排好的看病顺序输出病人的ID,每行一个。3.非老年人按登记的先后顺序看病。1.老年人(年龄 ≥60。岁)比非老年人优先看病。
2025-04-05 01:37:34
548
原创 明明的随机数(信息学奥赛一本通-1184)
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。有2行,第1行为1个正整数,表示所生成的随机数的个数:N;第2行有N个用空格隔开的正整数,为所产生的随机数。
2025-04-05 01:11:44
198
原创 单词排序(信息学奥赛一本通-1185)
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。按字典序输出这些单词,重复的单词只输出一次。
2025-04-05 01:00:42
446
原创 出现次数超过一半的数(信息学奥赛一本通-1186)
给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。如果存在这样的数,输出这个数;第一行包含一个整数n,表示数组大小;
2025-04-04 20:55:52
275
原创 统计字符数(信息学奥赛一本通-1187)
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。输入包含一行,一个字符串,长度不超过1000。
2025-04-04 20:36:34
315
原创 Knight Moves(信息学奥赛一本通-1257)
输入n代表有个n×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步。第二行和第三行分别表示马的起始位置和目标位置(0..L−1)。马移动的最小步数,起始位置和目标位置相同时输出0。第一行是棋盘的大小L(4≤L≤300);首先输入一个n,表示测试样例的个数。每个测试样例有三行。
2025-04-04 20:10:34
434
原创 献给阿尔吉侬的花束(信息学奥赛一本通-1256)
阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。字符S表示阿尔吉侬所在的位置,字符E表示奶酪所在的位置,字符#表示墙壁,字符.表示可以通行。阿尔吉侬在1个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。每组数据的输出结果占一行。每一组数据的第一行包含了两个用空格分开的正整数R和C(2 ≤ R, C ≤ 200),表示地图是一个R×C的矩阵。
2025-04-04 19:53:00
441
原创 迷宫问题(信息学奥赛一本通-1255)
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。一个5 × 5的二维数组,表示一个迷宫。左上角到右下角的最短路径,格式如样例所示。
2025-04-04 19:24:01
440
原创 The Castle(信息学奥赛一本通-1250)
后面的m行,每行有n个整数,每个整数都表示平面图对应位置的方块的特征。一座城堡被分成m*n个方块(m≤50,n≤50),每个方块可有0~4堵墙(0表示无墙)。在这个问题中,输入的每个方块的数字 g[i][j] 用二进制位来表示该方块四个方向上是否有墙。平面图用一个数字表示一个方块(第1个房间用二进制1011表示,0表示无东墙,用十进制11表示)。室内的墙被定义两次: 例如方块(1,1)中的南墙也被位于其南面的方块(2,1)定义了一次。i = 1 时,1 << 1 为 0010,对应北墙。
2025-04-03 23:09:21
795
原创 Dungeon Master(信息学奥赛一本通-1248)
这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了东南西北移动外还多了上下。这题用BFS解,每次去队首元素,如果是终点则输出结果移动的次数,否则,从该点开始分别向东南西北上下移动(如果可以走的话)并继续搜,如果到队列为空还没搜到解法,则说明无解。对于题目给出数据的含义就是输入l,r,c,分别代表迷宫有l层,每层长宽分别是c,r。前三个数,分别表示层数、一个面的长和宽,后面是每层的平面图。
2025-04-02 18:10:45
400
原创 红与黑(信息学奥赛一本通-1216)
每组数据的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。在接下来的H行中,每行包括W个字符。有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。对每组数据,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。当在一行中读入的是两个零时,表示输入结束。1)‘.’:黑色的瓷砖;2)‘#’:红色的瓷砖;
2025-03-28 14:23:12
657
原创 合影效果(信息学奥赛一本通-1182)
小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。第一行是人数n(2≤n≤40,且至少有1个男生和1个女生)。位,相邻两个数之间用单个空格隔开。
2025-03-26 14:27:27
422
原创 整数奇偶排序(信息学奥赛一本通-1181)
输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于30000。按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。给定10个整数的序列,要求对其重新排序。1.奇数在前,偶数在后;2.奇数按从大到小排序;3.偶数按从小到大排序。
2025-03-26 11:35:09
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅