
pta
1886i
尽人事听天命
接程序开发、JavaWeb、C、C++、Py项目,接bug修改
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】图解Kruskal算法+详细代码实现
它的基本思想是按照权值从小到大的顺序选择边,并保证所选的边不会构成环路,直到选取了n-1条边为止,此时形成的树即为最小生成树。综上所述,克鲁斯卡尔算法是一种有效的求取最小生成树的方法,特别适用于边数较少的图。在实际应用中,选择合适的算法对于提高计算效率和优化网络设计至关重要。原创 2024-06-10 23:45:04 · 636 阅读 · 0 评论 -
【数据结构】七大排序图解+代码实现
我们也可以进行优化,找一个是找要两个也是找,将数组整个分为三段[0,l -1](前已排序部分), [l, r](未排序部分), [r+1, n](后已排序部分)我们可以同时在未排序部分寻找未排序部分的最小值和最大值,最小值与l交换,最大值与r交换,这里要注意的时在将最小值与l交换后,需要判断我们寻找到的最大值是否指向l,如果指向l,在前面最小值与l交换中,l指向的位置已经被交换到了minIndex位置,此时我们需要将maxIndex的位置进行修改,确保最大值不变。依次重复上述步骤,直到j遍历完n-1遍。原创 2024-03-18 22:25:50 · 980 阅读 · 1 评论 -
【字符串匹配】BF与KMP算法
由于在kmp算法中,i指针是不回退的,所以我们在j匹配失败时需要让j回退到合适的位置上,而next数组就记录了当j此时匹配失败时回退到next[j]的位置继续进行匹配,那next数组是如何进行维护的呢。需要注意的是,BF算法的时间复杂度较高,为O((n-m+1)*m),其中n是主文本字符串的长度,m是模式字符串的长度。此外,在实际应用中,字符串匹配问题可能会有更多的变化和挑战,例如处理包含特殊字符的字符串,或者在不完全匹配的情况下找到最接近的匹配项。下面是使用C++实现BF算法的代码示例:。原创 2024-03-18 22:20:47 · 1099 阅读 · 0 评论 -
【数据结构】图解二叉搜索树的新增、搜索、删除
通常的做法是找到该节点的右子树中的最小节点(或者左子树中的最大节点),用这个节点的值替换待删除节点的值,然后删除那个最小(或最大)节点。依旧往左发现往左为空,于是我们就可以将1插入到此处,但是要想插入到这里,我们需要记录父亲节点,所以在遍历的时候我们需要记录父亲节点位置。总的来说,二叉搜索树的删除操作是一个相对复杂的过程,需要根据不同的情况采取不同的策略,并且在整个过程中保持树的平衡和有序性。当前cur节点的值依旧比目标值9要小,于是我们又去他的右子树中寻找。有如下这样一颗二叉树,我们需要查询9所在节点。原创 2024-03-07 00:54:29 · 1344 阅读 · 0 评论 -
【排序】希尔排序
它的主要思想是将待排序的序列分割成若干个子序列,这些子序列的元素是相隔一定“增量”的。然后对每个子序列进行直接插入排序。当增量减至1时,整个序列会进行最后一次直接插入排序,此时整个序列变为一个子序列,排序完成。随着增量递减,子序列包含的元素越来越多,但此时大部分元素已经基本有序,插入排序依然高效。总之,希尔排序的效率很大程度上取决于增量序列的选择,不同的增量序列可能导致排序性能的显著差异。虽然到目前为止没有找到最佳的增量序列,但通过合理选择增量序列,希尔排序在大数据集上通常表现出比传统插入排序更好的性能。原创 2024-03-06 01:06:29 · 476 阅读 · 0 评论 -
【排序】详解归并排序
归并排序是一种稳定的排序算法,适用于大数据量时效率较高,且可以用于链表等数据结构的排序。然而,它的不足之处在于需要额外的存储空间来存放临时数组,并且对于小规模数据的排序效率不如某些简单的排序算法,如插入排序。此外,由于其递归的特性,归并排序在深度很大的情况下可能会导致调用栈溢出。归并排序的核心思想是分治法,即将大问题分解成小问题来解决,然后再将解决后的小问题的结果合并以解决原来的大问题。对于一个这样的数组,首先我们需要将这个数组不断的划分为两个子数组。然后将这些子数组逐个排序合并。原创 2024-03-05 20:44:26 · 517 阅读 · 0 评论 -
【排序】详解堆排序
具体实现如下:首先我们需要从最后一个孩子所在的子堆进行调整,最好一个孩子就是数组长度-1的位置,那么我们如何根据孩子节点的下标去求出父亲节点的下标呢,我们只需要让孩子节点的下标减去1的差然后除2就能得到父亲节点的下标,同样我们知道父亲节点的下标同样除2在加1就能求出孩子节点的下标。首先我们需要找到孩子节点中的最大值,然后拿他与父亲节点比较,如果他比父亲节点大,那么就进行交换,然后依次向下进行调整(调整孩子节点的子堆),如果比父亲节点小说明这个堆已经调整完成我们就可以结束向下。重复此操作将最大值交换到末尾。原创 2024-03-05 20:18:23 · 1001 阅读 · 0 评论 -
【排序】详解冒泡排序
在每一轮的排序过程中,都会从数列的起始位置开始,对相邻的元素进行比较,如果它们的顺序不符合要求(例如,前一个元素大于后一个元素),则交换它们的位置。这样,每轮遍历后,至少会有一个元素被移动到其最终位置。如果一个数组本来就是有序或者经过小于n-1次就已经排好了序,那么j指针后续的遍历就是徒劳,所以我们可以根据j指针在遍历过程中是否有交换进行判断,如果没有交换说明已经排好序,这个时候就可直接返回。冒泡排序的过程可以形象地比喻为水中的气泡上升过程,较小的元素逐渐“冒”到数列的顶端,而较大的元素则沉到底部。原创 2024-03-05 19:24:14 · 537 阅读 · 0 评论 -
【排序】详解选择排序
图解依旧将数组分为已排序部分跟为排序部分,初识时定义一个指针指向已排序部分的下一个位置,然后定义一个指针指向未排序部分,依次遍历未排序部分寻找未排序部分的最小值,寻找到后与已排序部分的下一个位置进行交换依次重复。开始时i指向已排序部分的下一个位置,j指针在未排序部分寻找最小值此时minIndex指向了最小值,于是将他与i位置进行交换,之后i指向下一个位置,j依旧在剩余未排序部分去寻找最小值,重复上述步骤。原创 2024-03-05 19:06:49 · 580 阅读 · 0 评论 -
【排序】详解插入排序
在j从i-1遍历向0的过程中,拿arr[j]与存储的变量t进行比较,因为前部分都是已排序部分,所有在进行比较时会出现两种情况:1》arr[j] > t 说明此时j位置并不是t要插入的位置,这个时候我们可以让j+1的位置修改为arr[j],然后j--继续去比较 2》arr[j] < =t, 此时说明j位置就是t要插入的位置,我们可以结束j的遍历然后让j + 1位置的值更改为t。这个时候arr[j] > t,于是让arr[j+1]=arr[j]依旧是arr[j] > t,于是让arr[j+1]=arr[j]原创 2024-03-05 18:35:23 · 714 阅读 · 0 评论 -
【排序】基于快速选择算法的快排实现
此时进行将遍历指针指向的元素与基准元素进行比较依次重复此操作,当遍历指针指向的元素比基准元素小时执行:swap(arr[i++], arr[++s]) ,当与基准元素相等时只需要执行i++即可。总的来说,快速选择算法是一种基于快速排序的选择算法,它高效地解决了在不完全排序的数组中寻找特定顺序元素的问题,并因此在各种算法竞赛和实际应用场景中得到了广泛的使用。然后使用一个指针指向开始位置依次往后遍历,如果当前元素比基准元素大则将该元素放在末尾,也就是基准元素后面,如果比当前元素小则将他放在基准元素前面。原创 2024-03-04 00:31:30 · 806 阅读 · 0 评论 -
【二分】第k个缺失的数
第K个缺失的数。原创 2024-03-03 02:14:23 · 411 阅读 · 0 评论 -
【双指针】移动零
移动零。原创 2024-03-03 02:10:51 · 400 阅读 · 0 评论 -
【双指针】删除有序数组中重复元素,双指针原地修改数组
删除有序数组中重复元素。原创 2024-03-03 01:47:04 · 473 阅读 · 0 评论 -
【双指针】合并两个有序数组O(N)
合并两个有序数组。原创 2024-03-03 01:45:12 · 445 阅读 · 0 评论 -
【快速选择】解决TopK问题
TopK问题就是在一个数组中寻找出最小(大)的前K个数,或者寻找出第K大(小)的数常见TopK问题图示常见TopK问题链接最小的K个数_牛客题霸_牛客网给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是。题目来自【牛客题霸】寻找第K大_牛客题霸_牛客网. - 力扣(LeetCode)优先级队列是一种数据结构,它根据元素的优先级来决定元素的插入和删除顺序。基于优先级排序:每个元素在队列中都有一个优先级,优先级最高的元素会首先被移除。使用特定数据结构。原创 2024-03-02 01:40:19 · 1894 阅读 · 1 评论 -
【二分】二分模板+二分题目
- 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。. - 力扣(LeetCode). - 力扣(LeetCode)原创 2024-03-01 19:10:22 · 401 阅读 · 0 评论 -
【PTA】数据结构第二次上机实验:2-1 逆序数据建立链表2-3 链式表的按序号查找2-4 求链式表的表长2-5 单链表逆转2-6 两个有序链表序列的合并2-7 单链表 - 20. 单值化(去重)
函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。链表节点结构定义如2-2 链式表操作集分数 20全屏浏览题目切换布局作者 陈越单位 浙江大学本题要求实现链式表的操作集。while(L!}L=L->Next;}}L = n;return L;原创 2022-10-27 20:24:01 · 2354 阅读 · 0 评论 -
【PTA] 作者 李祥单位 湖北经济学院6-1到6-12 顺序表
6-11 顺序表 - 20. 线性表逆置。6-3 顺序表 - 12. 线性表长度。6-8 顺序表 - 10. 输入线性表。6-10 顺序表 - 19. 查找元素。6-13 顺序表 - 24. 简单合并。6-1 顺序表 - 3. 创建线性表。6-2 顺序表 - 4. 销毁线性表。6-6 顺序表 - 9. 清空线性表。6-7 顺序表 - 7. 输出线性表。6-9 顺序表 - 14. 读取元素。6-4 顺序表 - 6. 插入元素。6-5 顺序表 - 8. 删除元素。原创 2022-10-19 21:30:20 · 14264 阅读 · 5 评论 -
6-4 窗口售票分数 10作者 wly-kx 线程同步,售票系统,4个窗口售票,不允许重票、错票。
在这里描述函数接口。例如:在这里解释接口参数。例如:其中N和D都是用户传入的参数。N的值不超过int的范围;D是[0, 9]区间内的个位数。函数须返回N中D出现的次数。原创 2022-09-23 15:41:16 · 489 阅读 · 0 评论 -
7-20 多个线程之间的同步执行分数 成都 使用同步锁,假设有三个线程(A、B、C)实现线程A执行完了才可以执行线程B,C执行完了再可以执行C,如有四个线程以此类
使用同步锁,假设有三个线程(A、B、C)实现线程A执行完了才可以执行线程B,C执行完了再可以执行C,如有四个线程以此类推启动3个线程线程1 每一次输入一个字符或字符串,例如A线程2 每一次输入一个字符或字符串,例如B线程3 每一次输入一个字符或字符串,例如C连续3次 要求结果输入是A B C A B C A B C 这种连续的(最后有一个空格)。原创 2022-09-23 15:06:28 · 731 阅读 · 0 评论 -
【PTA】7-19 倒计时
1.该线程使用实现Runnable接口的写法;2.程序该线程每隔0.5秒打印输出一次倒数数值(数值为上一次数值减1)。原创 2022-09-23 01:17:18 · 545 阅读 · 0 评论 -
【PTA】7-18 异常的捕捉、处理、自定义
自定义一个异常类,当除数为0是抛出并捕捉异常,输出”除数不能为0!”Java异常分类,异常处理,自定义异常。原创 2022-09-23 00:29:39 · 762 阅读 · 0 评论 -
【PTA】7-16 使用抽象方法评定学生成绩等级
设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类 Postgraduate用于计算成绩等级。其中 Student 类是一个抽象类 , 它包含评级抽象方法, 而 Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的差别是计算课程成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如下表所示:本科生标准 研究生标准80-100 优秀 90-100 优秀。原创 2022-09-22 23:49:26 · 1126 阅读 · 1 评论 -
【PTA】7-17 使用抽象类实现简单计算
设计三个类,分别是抽象类Calculation,及其子类addition(加法)和Subtraction(减法),通过实现抽象方法math实现计算。原创 2022-09-22 22:18:15 · 290 阅读 · 0 评论 -
【PTA】7-9 得到字符串的最小价值
有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值例如: 字符串"abacaba",里面包括4个'a',2个'b',1个'c',于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。原创 2022-09-22 17:43:19 · 451 阅读 · 0 评论 -
【PTA】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?输出24个月的兔子总数
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?输出24个月的兔子总数。原创 2022-09-21 18:49:40 · 1371 阅读 · 0 评论 -
6-6 文件读写操作
编写函数,从给定的输入文本文件中按行读入,并按行写入给定的输出文件中。要求:1)去除每行的前导空格或制表符。2)每行前加行号。函数接口定义:void fileRW(FILE *fin,FILE *fout); 其中fin和fout都是用户传入的参数,分别是读入文件和输出文件的指针(已按要求打开)。裁判测试程序样例:#include <stdio.h> void fileRW(FILE *fin,FILE *fout); int main(){ char fn.原创 2022-05-03 21:19:05 · 1058 阅读 · 0 评论 -
以下主函数连同函数CreateMyfile()、printfmyfile()、GetFilelen()、ReadFileToBuf()、save()、sort()实现了两个文本文件的信息合并,并按字母
#include<stdio.h>#include<string.h>#include<stdlib.h>#pragma warning(disable:4996)void CreateMyfile(char* filename){ //打开文件 FILE* pf = fopen(filename, "w"); if (pf == NULL) { perror("fopen"); return;.原创 2022-04-29 15:09:14 · 517 阅读 · 0 评论 -
小明最近喜欢玩一款新游戏。在该游戏中,需要组建队伍去完成任务以获取奖励。小明挑出了所有的队员(每个人能力不同),需要一个函数挑出队长(能力最强的队员)。
函数接口定义:void showCaptain(TeamMember team[], int n); 参数说明:team中从下标0开始存放n个TeamMember,n>0。函数功能:找出队长并输出其各项信息裁判测试程序样例:#include<stdio.h> #include<stdlib.h> #define NAME_LEN 100 #define SEX_LEN 6 typedef struct { int id;//身份证号码 char原创 2022-04-10 22:14:28 · 2473 阅读 · 1 评论 -
输入n(n<50)个学生的成绩信息,再输入一个学生的学号、课程以及成绩,在自定义函数update_score()中修改该学生指定课程的成绩
输入n(n<50)个学生的成绩信息,再输入一个学生的学号、课程以及成绩,在自定义函数update_score()中修改该学生指定课程的成绩函数接口定义:int update_score(struct student *p, int n, int num, int course, int score); 其中p是结构指针,n是学生个数,course是课程序号,score是修改后的课程成绩。函数须返回指定学生的顺序位置,如果查无此人,返回-1。裁判测试程序样例:#inc原创 2022-04-10 21:59:48 · 4358 阅读 · 1 评论 -
有N名学生,每个学生的数据包括学号、姓名、数学成绩、语文成绩,从键盘输入N名学生的数据,并计算出每个学生的平均成绩,最后显示最高平均分的学生的信息,包括学号,姓名,两门课的成绩,平均分数(保留小数点后
函数接口定义:void InputData(STU *p,int num); STU *FindMaxIndex(STU *p,int num); 裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> #define N 5 typedef struct { int id; char name[20]; int math; int chinese; double aver; }STU; void InputData(STU原创 2022-04-10 18:44:59 · 7530 阅读 · 2 评论 -
程序的功能是:调用Input函数读入最多80个字符,要求字符串中只保留字母和空格,遇到读满或者回车结束读入字符,空格用于分隔单词。请将字符串中用空格分隔的单词在屏幕上输出来。要求用指针完成函数中各参
函数接口定义:void Input ( char *str ); int Split_Count ( char *str,char **pStr ); 裁判测试程序样例:#include <stdio.h> /* userCode(<80字符): 自定义函数之原型声明 */ void Input ( char *str ); int Split_Count ( char *str,char **pStr ); int main(void) { char Stri原创 2022-04-10 18:20:27 · 1668 阅读 · 0 评论 -
(pta成信大余老师题错误已改)从键盘上输入N个字符串(约定:每个字符串中字符数≤80字节),对其进行升序排序并输出。
函数接口定义:void sort_Str(char **p); 裁判测试程序样例:#include<stdio.h> #include<string.h> #define N 5 void sort_Str(char **p); int main(void) { int i; char *pstr[N], str[N][81]; for (i=0; i<N; i++) { pstr[i] = str[i]; } for (i=0; i<N; i原创 2022-04-10 16:42:40 · 2372 阅读 · 0 评论 -
本题要求实现一个字符串查找的简单函数。(strstr函数模拟实现)
本题要求实现一个字符串查找的简单函数。函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。裁判测试程序样例:#include <stdio.h> #define MAXS 30 char *search(char *s, char *t); void ReadString( char s[] ); /* 裁判提供,细节不表 */ int main() { char s[MAXS], t[MAXS], *pos; ReadString(s原创 2022-04-10 15:48:56 · 3102 阅读 · 0 评论 -
本题要求实现一个函数,将两个字符串连接起来。(strcat)函数实现
函数接口定义:char *str_cat( char *s, char *t ); 函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。裁判测试程序样例:#include <stdio.h> #include <string.h> #define MAXS 10 char *str_cat( char *s, char *t ); int main() { char *p; char str1[MAXS+MAXS] = {'\原创 2022-04-10 14:23:29 · 5962 阅读 · 0 评论 -
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符函数接口定义:char *match( char *s, char ch1, char ch2 ); 函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。裁判测试程序样例:#include <stdio.h> #define MAXS 10 char *match( char *s, char ch1原创 2022-04-10 14:15:40 · 11874 阅读 · 7 评论 -
在一个N×N的矩阵中,如果某个元素的值大于其上下左右四个相邻元素之和,则本题称这个元素为“重点”。本题要求寻找给定矩阵中的所有“重点”。
需要注意的是:矩阵中元素的坐标采用(x,y)的形式,x为元素所在的行号、y为元素所在的列号,x和y均从0开始 矩阵的行号由上至下增长;列号从左到右增长 最上方一行的元素,其“上方”相邻元素,位于同列的最下方一行 最下方一行的元素,其“下方”相邻元素,位于同列的最上方一行 最左方一列的元素,其“左方”相邻元素,位于同行的最右方一列 最右方一列的元素,其“右方”相邻元素,位于同行的最左方一列输入格式:第一行给出一个不大于400的正整数N,接下来N行,每行N个不超过500的正整数,用空格分原创 2022-04-08 22:07:44 · 905 阅读 · 0 评论 -
请编程输出如下规律的N*N方阵。*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*D
###方阵请编程输出如下规律的N*N方阵。(此题由黄玉妍老师提供)*UUUUUUUU*L*UUUUUU*RLL*UUUU*RRLLL*UU*RRRLLLL**RRRRLLLL**RRRRLLL*DD*RRRLL*DDDD*RRL*DDDDDD*R*DDDDDDDD*其中,对角线上的符号为*,其余4个区域内的符号分别是UDLR,代表上下左右。特别的,当N=1时,输出:*当N=2时,输出:****输入格式:输入为1个正整数(1-50之间)。输出格式:按原创 2022-04-07 21:22:33 · 994 阅读 · 0 评论 -
给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。“改变矩阵元素“的操作定义
任务描述给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。"改变矩阵元素"的操作定义为0变成1或者1变成0。输入格式:输入n + 1行,第1行为矩阵的大小n(0 < n < 100),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。输出格式:如果矩阵符合条件,则输出OK;如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号原创 2022-04-06 22:26:10 · 3512 阅读 · 0 评论