- 博客(36)
- 收藏
- 关注
原创 C语言应用实例:背包DP1(Bone Collector、Piggy-Bank、珍惜现在,感恩生活)
顾名思义,背包问题就是类似于往背包里装东西的问题。
2025-12-01 14:07:12
891
原创 C语言应用实例:递归,卡特兰数(超级楼梯、小兔的棋盘)
本文包含两个算法问题的分析与解答:1. "超级楼梯"问题采用动态规划方法解决,类似于斐波那契数列,递推公式为dp[n]=dp[n-1]+dp[n-2],通过预处理计算1-40级楼梯的走法数;2. "小兔的棋盘"问题运用组合数学中的卡特兰数,计算从(0,0)到(n,n)不穿越对角线的路径数,公式为2*C(2n,n)/(n+1),其中C(n,k)通过组合数优化计算。两个问题都提供了完整的C语言实现代码。
2025-11-27 15:07:53
430
原创 C语言应用实例:DP入门、Dilworth定理(数塔、导弹拦截、丑数、搬寝室、免费馅饼)
本文介绍了四个经典算法问题的解决方案: 数塔问题:采用动态规划从底层向上计算,每个节点取其下方相邻节点中的较大值累加,最终顶层节点即为最大路径和。 导弹拦截:基于Dilworth定理,将问题转化为求最长严格递增子序列长度,所需拦截系统数等于该长度。 丑数问题:通过维护四个指针动态生成丑数序列,每个新丑数都是已有丑数乘以2/3/5/7中的最小值。 搬寝室问题:先对物品排序,使用动态规划计算最小疲劳度,状态转移考虑是否选取当前物品与前一个物品配对。 免费馅饼问题:转化为数塔问题,从最后时间倒推计算每个位置能获得
2025-11-26 21:05:34
634
原创 C语言库函数:include<limits.h>
C语言标准库头文件<limits.h>定义了整数类型的取值范围,包含常用宏如INT_MAX(2147483647)、INT_MIN(-2147483648)等,分别表示int型的最大最小值。该文件还定义了unsigned int、long、long long等类型的极限值,如UINT_MAX(4294967295)、LLONG_MAX(9223372036854775807)等,为程序开发提供基本类型范围参考。
2025-11-25 20:45:23
168
原创 C语言应用实例:小希的迷宫(并查集,生成树)
摘要:本文探讨了生成树的概念及其在图论中的应用,特别关注判断一个无向图是否为生成树的条件。通过分析题目要求,给出了使用并查集数据结构检测图中是否存在环和判断连通性的详细算法流程。关键实现包括初始化父节点数组、查找根节点函数、合并操作,以及在输入处理过程中实时检测环和统计连通分量数量。最终通过统计根节点数量判断是否为单一连通树,满足题目要求的"任意两个节点有且仅有一条路径"的条件。
2025-11-10 19:02:00
308
原创 C语言应用实例:做不完的畅通工程(并查集)
本文介绍了并查集(Disjoint Set)的原理及其在畅通工程问题中的应用。首先阐述了并查集的基本概念和实现方法,包括使用最小元素标记集合的树状结构优化。随后通过四个逐步升级的畅通工程案例展示了并查集的实际应用:从基础道路连通问题到最小生成树(Kruskal算法)的实现,再到包含成本计算和连通性检查的进阶版本。每个案例都包含详细的问题描述、解题思路和完整代码实现,体现了并查集在解决连通性问题和优化网络建设成本中的重要作用。
2025-11-09 20:43:56
808
原创 C语言应用实例:奋勇争先锋(贪心,qsort用法)
题目要求对N名学生的成绩进行排序,排序规则为:首先按解题数量降序排列,若数量相同则按罚时升序排列,最后输出前M名。使用结构体存储学生信息,并通过qsort函数实现自定义排序(比较函数先比较解题数量,再比较罚时)。输入包含C组测试数据,每组给出N和M,随后是N个学生的姓名、解题数和罚时。输出每组前M名的学生信息,每组结果间空一行。该解法时间复杂度为O(N log N),能有效处理题目给定的数据规模。
2025-11-07 16:28:59
245
原创 C语言应用实例:硕鼠游戏,田忌赛马,搬桌子,活动选择(贪心算法)
这是一份贪心算法学习笔记,涵盖了四个经典问题。贪心算法通过局部最优选择寻求全局最优解,关键在于证明贪心策略的正确性。硕鼠游戏是分数背包问题,按单位猫粮可兑换豆子数排序,优先选择兑换率高的房间。田忌赛马通过排序后比较最高速马匹,巧妙安排比赛顺序最大化胜场。搬桌子问题实为区间重叠计数,将房间号映射到走廊段,找出最大重叠数以确定最短时间。活动选择问题按结束时间排序,每次选择开始时间不早于上一活动结束的活动,以观看最多完整节目。四个问题均运用排序预处理和贪心选择策略,体现了贪心算法在不同场景下的灵活应用。代
2025-11-07 14:39:00
452
原创 C语言应用实例:解方程(二分查找)
本文介绍了求解方程8x⁴+7x³+2x²+3x+6=y在x∈[0,100]范围内实数解的方法。针对每组测试数据Y值,若超出函数值范围则输出"Nosolution!",否则采用二分法精确求解。算法取定义域中点mid,通过比较f(mid)与Y值调整左右边界,直至精度达1e-8以确保结果精确到小数点后4位。文中给出了完整C语言实现代码,包含方程函数定义和二分查找过程。该解法避免了暴力计算的高复杂度,有效提升了求解效率。
2025-11-05 23:06:36
406
原创 C语言应用实例:学生管理系统1(指针、结构体综合应用,动态内存分配)
本文介绍了一个基于C语言的学生管理系统实现方案,重点讲解了如何利用指针和结构体实现学生信息的增删查改功能。系统采用动态内存分配提高效率,包含菜单、添加、查询、修改、删除等核心功能模块。其中添加学生时采用自动扩容策略,修改和删除操作通过指针直接操作原数据。代码展示了完整实现,包括结构体定义、功能函数编写和主程序逻辑,并解释了指针传递数据的优势。该系统通过结构体组织学生信息,使用指针和动态内存管理实现高效操作,是C语言基础知识的综合应用范例。
2025-11-05 20:10:12
794
原创 C语言应用实例:最小公倍数与最大公约数的关系
本文介绍了计算两个正整数最小公倍数的算法。通过分析暴力枚举法的效率问题,引入了基于欧几里得算法的优化方案:利用公式lcm=a*b/gcd,其中gcd通过辗转相除法高效求得。代码实现展示了如何用C语言计算gcd并套用公式求lcm,显著提升了计算效率。该方法避免了超时风险,适用于不大于1000的整数输入。
2025-11-03 19:51:03
332
原创 C语言应用实例:斐波那契数列与其其他应用
本文介绍了斐波那契数列及其相关编程题解。第一部分说明斐波那契数列的定义(0,1,1,2,3...)和递推公式。第二部分给出基础题型:山寨版斐波那契数列的计算(含偶数项特殊处理),提供C语言递归解法。第三部分探讨拓展题型:判断新型斐波那契数列能否被3整除,通过分析数列规律发现当(n-2)%4==0时满足条件,给出优化解法避免暴力枚举。全文通过两个编程案例,由浅入深地展示了斐波那契数列的数学特性和算法优化思路。
2025-11-03 19:29:19
990
原创 C语言入门学习:signed/unsigned作用详解
本文介绍了C语言中有符号(signed)和无符号(unsigned)数据类型的区别与应用。主要内容包括:1)基本定义,有符号类型可表示正负数和零,无符号仅表示非负数;2)数据范围对比,展示常见类型的有符号和无符号取值范围;3)声明初始化方法及常见错误;4)内存表示差异,有符号采用补码形式;5)适用场景,无符号适合表示大小、数量等,有符号适合需要负数的场景;6)注意事项,重点指出混合运算陷阱、循环边界问题和溢出行为差异;7)使用建议,包括类型选择原则、安全转换方法和标准类型定义;8)调试技巧,检测符号比较问题
2025-10-05 18:37:46
485
原创 C语言入门学习:结构体(超详细,看这一篇就够了!)
本文全面介绍了C语言中结构体的使用方法。主要内容包括:1.结构体的基本概念和定义语法,通过struct关键字将不同类型数据组合成新类型;2.结构体的初始化和成员访问方式,包括直接访问和指针访问;3.结构体数组、嵌套结构体以及结构体作为函数参数的用法;4.结构体大小计算和内存对齐问题;5.结构体指针和动态内存分配;6.常见应用场景如链表、学生管理系统等;7.使用中的常见错误点,如字符串赋值、结构体比较、深浅拷贝等问题。最后给出了使用建议,强调合理设计结构体以减少内存浪费,注意字符串和动态内存管理等重要事项。
2025-10-05 14:20:02
1257
原创 C语言入门学习:链表(超详细,看这一篇就够了!)
本文详细介绍了链表这种动态数据结构的基本概念和操作。链表由节点组成,每个节点包含数据域和指针域,相比数组具有动态内存分配、高效插入删除等优点。文章阐述了链表的类型(单向、双向、循环)、节点定义方法,并重点讲解了链表的创建、插入、删除、遍历等基本操作及其C语言实现。此外,还介绍了链表在栈、队列和多项式运算中的应用,指出了常见的内存管理和指针操作错误,并提供了调试技巧。全文通过代码示例和对比分析,为初学者提供了链表从理论到实践的全面指导。
2025-10-05 12:17:42
1387
原创 C语言基础学习:指针详解及易错点分析(超详细,看这一个就够了!)
这篇文章系统介绍了C语言中指针的核心概念和应用。主要内容包括:指针的定义与声明、指针运算(递增、递减、比较)、指针数组与多级指针、指针作为函数参数和返回值、void指针等。文章详细解析了指针的常见错误点,如野指针、空指针解引用、内存泄漏等,并给出了正确实践。此外,还介绍了指针的高级应用场景,如与数组、字符串、结构体的结合使用,动态内存分配,以及const与指针的配合。最后提供了指针调试技巧。全文通过大量代码示例,全面讲解了指针这一C语言核心特性的使用方法和注意事项。
2025-10-05 00:12:15
668
原创 C语言入门:数组的常见操作算法
本文介绍了数组的基本操作实现,包括:1)添加元素(尾添加、指定位置插入);2)查找元素(按索引/元素值查找);3)删除元素(按索引/元素值删除);4)替换元素(按索引/元素值替换)。文中提供了完整的C语言实现代码,包含输入验证和错误处理,并通过交互式菜单驱动演示功能。所有操作均基于固定长度数组实现,包含边界检查以确保安全性。文章还提及后续将补充排序算法实现(冒泡、选择、快速排序等)。核心代码展示了数组增删改查的标准实现方法,可作为基础数据结构练习范例。
2025-10-04 14:26:46
331
原创 Java应用实例:三角形判断(向量叉积、海伦公式)、分数序列求和
本文介绍了两个数学计算问题的解决方法。第一部分讲解如何通过坐标判断三点能否构成三角形,并计算其面积:使用向量叉积公式或海伦公式,给出两种Java实现方案,包括输入处理、三点共线判断和面积计算。第二部分解决分数序列求和问题:通过初始化分子分母变量,在循环中更新斐波那契数列关系并累加求和,最后格式化输出结果。两题均注重算法实现细节,包含完整可执行的Java代码示例。
2025-09-29 21:29:13
755
原创 Java应用实例:密码合法性判断(换行符消耗与判断条件拓展)、打印完数(静态方法应用)
本文包含两个编程题目及解答:1.密码安全判断程序,要求密码长度8-16位且包含至少三类字符(大写字母、小写字母、数字、特殊符号);2.完数查找程序,输出指定范围内所有完数及其因子。第一个程序通过字符类型检查实现密码安全性验证,第二个程序通过因子求和判断完数并格式化输出。两个程序均使用Java实现,包含完整的输入处理和结果输出功能。
2025-09-29 20:32:16
391
原创 计算机学习基础:各进制间的转换关系及C/Java中进制转换的快捷实现方法
本文系统介绍了四种常用进制(十进制、二进制、八进制、十六进制)的转换方法。主要内容包括:1)各进制的位权概念;2)二进制/八进制/十六进制与十进制互转的按权展开法和除基取余法;3)二进制与八/十六进制间的分组替换法(3位或4位一组);4)C和Java语言中的进制转换实现方式。文中通过多个计算示例详细演示了转换过程,并总结了转换口诀和注意事项。特别强调了位权在进制转换中的核心作用,以及在编程中处理进制转换的常用方法。
2025-09-24 22:04:15
1080
原创 Java应用实例:矩阵旋转(字符串分割应用)、字符串比较(String)
摘要:本文包含两个Java编程题解。第一个题目要求将3x3字符矩阵逆时针旋转90度后输出,提供了两种实现方法:一种通过字符数组重组实现旋转,另一种使用split方法处理输入。第二个题目要求对三个输入的字符串按字典序排序后输出,通过Arrays.sort()方法实现排序。两个题目都给出了完整的Java代码实现,包括输入处理、核心算法和输出格式控制。
2025-09-22 22:25:46
232
原创 C语言经典应用实例分析:分糖果问题,校门外的树
摘要:本文包含两个编程问题的解决方案。第一个是"分糖果"问题,描述5个小朋友轮流将糖果均分给相邻小朋友的过程,给出最终糖果分配和吃掉的总数。第二个是"校门外的树"问题,计算移除指定区间内的树木后剩余数量,通过标记数组解决区间重叠问题。两个问题都提供了清晰的C语言实现代码,并解释了关键算法思路。
2025-09-21 19:37:20
387
原创 Java典例多行不规则输入解析:绝对值排序,查找最大元素(遇到新题会更新...)
本文介绍了两种Java实现绝对值排序的方法:1)手动冒泡排序法,通过循环比较元素绝对值大小进行交换排序;2)使用Arrays.sort结合自定义比较器,通过比较元素绝对值实现排序。两种方法均实现多组数据输入(以0结束),按照绝对值降序输出结果,数之间用空格分隔。方法一更基础,方法二代码更简洁。两种方式最后都需关闭Scanner释放资源。
2025-09-21 09:27:33
181
原创 Java应用实例:防御导弹问题与山寨版斐波那契数列(动态规划)
摘要: 导弹拦截问题:使用动态规划求解最长不上升子序列。对于每个导弹,检查之前所有高度不低于它的导弹,更新dp数组。最终结果为整个序列的最长不上升子序列长度。示例输入为389,207,155,300,299,170,158,65时,输出6。 山寨斐波那契数列:根据输入参数a,b和n,使用动态规划计算f(n)。奇数项为前两项和,偶数项为前三项和。n最大为30,通过初始化dp数组并迭代计算得出结果。 两个问题都采用动态规划解法,通过维护状态数组和递推关系获得最终解。
2025-09-19 21:45:02
755
原创 Java字母大小写转换(附ASCII编码表)
本文介绍了如何实现字符串大小写转换功能,通过判断字符ASCII码值范围来确定大小写字母,并进行加减32的转换操作。同时详细解释了ASCII编码表,包含128个字符的二进制、十进制和十六进制表示,特别指出大小写字母之间的差值为32。文章还展示了Java实现代码示例,说明了字符与整型计算时需要进行强制类型转换的原理。
2025-09-18 19:45:03
931
原创 Java哈希表入门详解(Hash)
哈希表是一种高效的数据结构,通过哈希函数将键映射到数组索引,实现快速查找。Java中的HashMap是其典型实现,采用链地址法处理哈希冲突。核心操作包括put、get、remove等,常用于键值对存储。使用时需注意:键不可重复、允许null值、非线程安全。遍历时推荐entrySet()方法以提高效率。自定义类作为键时,必须正确重写hashCode()和equals()方法。理解哈希原理有助于优化HashMap的使用。
2025-09-15 09:11:13
1484
原创 Java数据处理:从入门到实践(持续更新中...)
本文介绍了Java中字符串反转与获取指定位置数据的几种方法。在字符串反转部分,详细讲解了使用StringBuilder的reverse方法(包括基本用法、链式调用)以及手动实现的字符数组法和递归法,并比较了它们的性能差异与适用场景。在获取字符位置部分,介绍了charAt()方法和字符数组转换方式。文章特别指出StringBuilder的线程安全问题、递归解法可能导致的栈溢出风险,以及.trim()方法去除空格的作用。这些方法适用于不同场景下的字符串处理需求。
2025-09-13 22:51:46
482
原创 C++编程入门:从基础到实战(持续更新中...)
C++是一种支持面向对象编程的中级语言,由Bjarne Stroustrup在1979年开发。它继承了C语言特性,同时增加了类、继承、多态等面向对象功能。C++程序由核心语言、标准库和模板库组成,包含多种数据类型和结构。编写C++程序需要头文件、主函数、输入输出操作等基本语法元素,并支持注释功能。此外,C++还涉及各种进制转换操作。
2025-09-12 23:18:44
732
原创 泛型入门:参数化类型全解析(持续更新中...)
本文介绍了Java泛型的基本概念和应用。泛型是"参数化类型",通过类型参数化实现代码复用,常用符号包括E、T、K等。文章以动态数组删除方法为例,展示了从int类型到泛型E的转换过程,并说明返回值需要强制类型转换。同时解释了基本类型int可以通过自动装箱为Integer类来适配泛型要求。泛型的使用提高了代码的灵活性和安全性。
2025-08-30 18:13:29
346
原创 【详】零基础手把手带你写完一个五子棋游戏(附完整代码)
本文介绍了使用Java语言开发五子棋游戏的实现过程。通过Java Swing构建图形界面,采用BorderLayout布局划分棋盘区和功能区。关键实现包括:1) 自定义MPanel类重写paint方法实现棋盘绘制;2) 使用MouseAdapter和ActionListener处理鼠标和按钮事件;3) 构建Shapes类保存棋子信息,实现棋子落点和立体效果;4) 通过二维数组判断胜负,实现四个方向的连子检测;5) 功能按钮实现开始/重开、悔棋和复盘功能;6) 添加状态栏显示游戏信息。文章还提供了防止重复落子
2025-08-29 16:01:47
777
1
原创 数组专题---数组定义及冒泡、选择、插入三种常见排序(补充动态数组,持续更新中......)
本文介绍了数组的基本概念和操作方法,包括数组定义、存取数据、遍历等基础操作。重点讲解了三种排序算法(冒泡、选择、插入)的实现原理和示例代码,并详细说明了动态数组的实现方法,包括高效扩容、添加/删除数据、获取指定位置数据等功能。最后还介绍了获取系统时间的方法,可用于性能测试。文章通过具体代码示例,系统地展示了数组操作的核心技术要点,为编程实践提供了实用参考。
2025-08-14 22:17:00
191
原创 【初版】Java实现五子棋游戏(开始/重开、悔棋、复盘、重绘、接口存数据、立体棋子、判断输赢...)
本文介绍了一个基于Java Swing的五子棋游戏实现方案。系统采用MVC架构,包含GameUI(视图)、MPanel(棋盘绘制)、GameListener(事件处理)和Shapes(棋子绘制)四个核心类,通过Data接口定义游戏常量。游戏支持基本功能如棋盘绘制、棋子落子、开始/重开、悔棋、复盘等操作,并实现了胜负判断、坐标显示、步数统计等扩展功能。特色包括立体棋子效果、多方向胜负判定算法(横竖斜)、延时复盘演示等。系统采用面向对象设计思想,通过数组保存棋子状态,实现游戏逻辑与界面分离,展现了Java GU
2025-08-06 08:30:44
307
原创 Java学习第四课---简单画图程序设计--监听器的应用、图形重绘及数组应用
本文介绍了一个基于Java Swing开发的简易画图软件实现方案。系统采用MVC架构,包含四个核心类:DrawUI(主界面)、DrawListener(事件监听)、MPanel(绘图面板)和Shapes(图形对象)。主要功能包括:1)支持直线、矩形、圆形等基本图形绘制;2)实现颜色选择、粗细调整和橡皮擦功能;3)包含多种分形图案生成算法;4)采用对象数组存储图形数据实现重绘功能。关键技术点包括:鼠标事件监听处理、图形对象的序列化存储、自定义绘图面板的重绘机制以及多种分形算法的实现。该系统通过面向对象的设计方
2025-07-06 14:26:00
431
原创 Java学习第三课---设计图形化程序
本文介绍了Java图形化程序设计中使用标准库的基本概念和方法。主要内容包括:1.标准库的概念及头文件导入方式;2.常用GUI组件的调用方法,如JFrame、JLabel、JTextField等;3.通过QQ登录界面实例演示组件使用流程,包括窗口设置、布局管理、图片加载和控件添加;4.使用技巧和注意事项,如像素点概念、组件大小设置及源码查看方法。文章以实例代码详细展示了如何创建包含图片、文本框和按钮的GUI界面,并强调组件添加顺序和可见性设置的要点。
2025-06-25 01:06:07
386
1
原创 Java学习第二课---面向对象编程(oop)与类和对象
文介绍了面向对象编程中的类和对象定义,以及描述对象的属性和方法。通过示例程序展示了如何设计程序并调用对象的方法,以及如何设计类和处理访问修饰符。文章提供了关于私有函数的调用方法,并强调了命名规范和调用属性/方法时的格式区别。最后,还介绍了如何在方法参数中调用其他类的函数和变量。文章内容详实,逻辑清晰,为初学者提供了较为完整的面向对象编程入门指南。
2025-06-21 11:01:57
581
原创 Java学习第一课---基础语法
本文介绍了Java编程基础内容:1)7种数据类型(整型、浮点型、字符串等)及其特点;2)类(class)的定义和主函数(main)的固定格式;3)基础语法包括变量赋值、输出语句、三种循环结构(for/while/do-while)、if判断语句及break/continue用法;4)嵌套循环的应用示例(九九乘法表)及常见错误分析;5)编程规范如命名规则(禁用数字开头、避免拼音、类名首字母大写等)和关键字使用注意事项。文章通过具体代码示例讲解了Java基础语法的核心要点。
2025-06-21 10:45:32
583
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅