自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 回文子串马拉车(Manacher)算法

1 介绍给定一个字符串,要求输出该字符串所有可以构成回文串的子串2 暴力计算2.1 思想对于每个位置,我们从当前位置向左右两侧扩展,依次比对对称位置上的字符,知道字符不匹配为止,就构成了一个回文子串。我们需要考虑回文子串的长度是奇数还是偶数(1)当回文子串长度为奇数时:例如:abcba我们只需要从c位置向左右两侧扩展即可(2)当回文子串长度为偶数时:例如:abba我们无法找到中间位置,因此上述从中间位置向两侧扩展无法实行因此,我们需要对输入的字符串进行加工2.2 字符串的加工2.

2021-01-29 17:34:44 681 1

原创 字符串匹配KMP算法

介绍给定两个字符串str1和str2,如果str2是str1的子串则返回str2在str1中出现的首位置,否则str2不是str1的子串可以返回-1匹配过程我们使用两个指针p1和p2,p1指向str1当前所要进行比较的位置,p2指向str2当前所要进行比较的位置。(1)如果当前p1和p2指向的位置匹配成功,则p1和p2都向后移动一位(2)如果匹配失败,那么就将p2指向next数组中p2所指向的位置,即next[p2]next数组next数组记录的当前位置之前的字符串相等的最长前缀与最长后缀,指

2021-01-29 01:12:11 215 1

原创 第K小的数BFPRT算法

介绍BFPRT是解决求一个数组中第K小的数的算法,可以时间O(N)的时间复杂度,而使用排序求第K小的数的算法的时间复杂度为O(NlogN),因此BFPRT算法更加高效思想(1)分组:将原数组每五个数分为一组,不足5个数的单分一组(2)组内排序:每个小组从小到大进行排序(3)选取每个分组中的中位数组成一个中位数数组(4)求中位数数组的中位数(5)将第四步求出的中位数作为划分值,对原数组进行划分,小于的放左边,等于的放中间,大于的放右边getMid函数组内排序,并返回该组的中位数int ge

2021-01-30 15:23:30 413 1

原创 CPU类

题目定义一个 CPU 类,包含等级 (rank)、频率(frequency)、电压 (voltage) 等属性,有两个公有成员函数 run、stop。其中,rank 为枚举类型 CPU_Rank,定义为:enum CPU_Rank {P1=1, P2, P3, P4, P5, P6, P7};相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;enum CPU_Rank {P1=1, P2, P3, P4, P5, P6, P7};

2021-01-29 01:13:06 1214

原创 People类

题目设计一个用于人事管理的 People(人员) 类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号) 等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括构造函数和析构函数、拷贝构造函数、内联成员函数。相关阅读相关阅读完整代码#include<bits/stdc++.h>#define Pi 3.14;using namespace std;

2021-01-29 01:12:56 2262

原创 复数类Complex

题目定义一个复数类 Complex,虚部和实部为私有数据类型相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;class Complex{private: double re, im;public: Complex(){ re = 0; im = 0; }; double real() const {return re;}; double im

2021-01-29 01:12:42 1894

原创 Animal类

题目定义一个基类 Animal,有私有整型成员变量 age,构造其派生类 Dog,在其成员函数 setAge(int n) 中直接给 age 赋值,看看会有什么问题,把 age 改为公有成员变量,还会有问题吗?相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;class Animal{public: int age;};class Dog: public Animal{public: void setAge

2021-01-29 01:12:32 2210

原创 球、圆柱、圆锥类

题目编写一个程序计算出球、圆柱和圆锥的表面积和体积,要求如下:(a) 定义一个基类圆,至少含有一个数据成员半径;(b) 定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数;© 定义主函数,求球、圆柱、圆锥的体积;相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;class Circle{protected: double radius;public: virtual double g

2021-01-29 01:12:24 2628

原创 时期、时间类

题目定义一个日期 (年、月、日) 的类和一个时间 (时、分、秒) 的类,并由这两个类派生出日期和时间类。主函数完成基类和派生类的测试工作。相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;class Date{protected: int year; int month; int day;public: Date(){ cin >> year >> mon

2021-01-28 10:04:20 469

原创 CPoint类

题目设计一个描述二维平面内一点的 CPoint 类,成员包括:x,y。需要实现的功能(成员函数):构造函数、设置坐标、获取坐标、获取极坐标、求两点之间的距离。然后再设计一个描叙三维平面内一点的C3DPoint 类,该类为 CPoint 类的派生类,新添加的成员括:z。需新添加或重新定义的功能包括:构造函数、设置坐标、获取坐标、求两点之间的距离。请在 main() 函数中测试之。相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;cl

2021-01-28 10:04:07 3889

原创 shape类

题目下面的 shape 类是一个表示形状的抽象类,area() 为求图形面积的函数。从shape 类派生三角形类和圆类,并实现求面积函数:class shape{public:virtual double area()=0;};相关阅读相关阅读完整代码#include "bits/stdc++.h"using namespace std;class Shape{public: virtual double area()=0;};class Triangle: pub

2021-01-28 10:03:57 2291

原创 虚函数多态性实现求几何图形面积

题目利用虚函数实现的多态性来求四种几何图形的面积之和。这四种几何图形是:三角形 (Triangle)、矩形(Rectangle)、正方形 (Square) 和圆 (Circle)。几何图形的类型可以通过构造函数或通过成员函数来设置。相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;class Shape{public: virtual void set()=0; virtual double getAr

2021-01-28 10:03:42 1978

原创 Vehicle基类

题目定义一个车 (Vehicle) 基类,有 run、stop 等成员函数,由此派生出自行车 (Bicycle) 类、汽车 (Motorcar) 类,从 Bicycle 和 Motorcar 派生出摩托车(Motorcycle)类,它们都有run、stop 等成员函数。观察虚函数的作用。相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;class Vehicle{public: virtual void run

2021-01-28 10:03:24 1981

原创 计算器异常类

题目为简单计算器程序添加异常处理,考虑被零除和输入非法字符等情况; 使用 C++ 标准异常类层次结构改写上题?相关阅读相关阅读完整代码#include <bits/stdc++.h>using namespace std;class Zero: public exception{public: Zero(){}; const char* what(){ cout << "0不能作为除数!" << endl; }}

2021-01-28 10:03:12 607

原创 二进制打开文件并添加行号

题目编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。相关阅读相关阅读完整代码#include <bits/stdc++.h>using namespace std;int main(){ fstream file("test.txt", ios::in | ios::binary); string line[3]; int i=0, j=0; while(getline(file, line[i])){i++;} file.clo

2021-01-28 10:02:57 3396 4

原创 文件输出菲波那切数列

题目产生 Fibonacci 数列的前 20 个数,使用文件流ofstream 分别将它们写入文件fibonacci.txt,再从文件中读入存放在数组中并输出到屏幕。相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;int main(){ ofstream file; file.open("fibonacci.txt"); int a=1,b=1; file << a <

2021-01-28 10:02:41 420 1

原创 图书管理程序

题目设计一个管理图书目的简单程序,提供的基本功能包括:可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。为简单起见,描述一本书的信息包括:书号,书名,出版社和作者。相关阅读相关阅读完整代码#include <bits/stdc++.h>using namespace std;class Book {private: string id; string name

2021-01-28 10:02:27 742

原创 c++类实现链表

介绍实现链表的创建,查找,增加,删除操作,打印。完整代码#include <iostream>using namespace std;class Node{private: int data; Node *next;public: Node(){ next = NULL; } friend class linkList;};class linkList{private: Node *head; in

2021-01-28 10:02:13 2802

原创 Person类

题目设计一个 Person 类,成员包括:姓名、性别、年龄。需要实现的功能 (成员函数):输入、输出、修改成员,根据有关信息初始化对象。main() 函数先输出把对象初始化为缺省值的结果、再输出修改各成员的结果、再输出经输入函数修改各成员的结果、最后设计一个比较两人年龄的函数,并在 main() 函数中测试之。相关阅读相关阅读完整代码#include<bits/stdc++.h>#define Pi 3.14;using namespace std;class Person{

2021-01-27 11:29:58 3588

原创 矩形类

题目设计一个程序,定义一个矩形类,包括数据成员和函数成员。要求能获取和修改矩阵的的长和宽,并能计算矩阵的面积,并编写 main 函数进行测试。相关阅读相关阅读完整代码#include<bits/stdc++.h>#define Pi 3.14;using namespace std;class Rectangle{ double length; double width;public: double getLength(){ retur

2021-01-27 11:28:36 1340 1

原创 圆类

题目定义一个圆类 (Circle),属性为半径 (radius),要求能获取和修改圆的半径,并能计算圆的周长和面积,并编写 main 函数进行测试。相关阅读相关阅读完整代码#include<bits/stdc++.h>#define Pi 3.14;using namespace std;class Circle{ double radius;public: double getRadius(){ return radius; }

2021-01-27 11:27:33 1270

原创 成绩统计

题目编写函数 average 计算该成绩表的平均成绩和每个学生的平均成绩。在主函数输入该成绩表,调用该函数并输出结果。相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;class Student{public: string name; int course[4] = {0}; Student(){}; void input(string name, int course[4]){

2021-01-27 11:26:42 596

原创 加法函数重载

题目创建函数 plus(),它把两个数值加在一起,返回它们的和。提供 int、double、string 类型的重载版本相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;int Plus(int a, int b){ return a+b;}double Plus(double a, double b){ return a+b;}string Plus(string a, string b){

2021-01-27 11:25:21 584

原创 最大公约数和最小公倍数

题目使用函数指针来求两个正整数的最大公约数和最小公倍数相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;int GCD(int *a, int *b){ if (*b == 0) return *a; int temp = *a%*b; a = b; b = &temp; return GCD(a, b);}int LCM(int *a, int *b){

2021-01-27 11:24:06 261

原创 三角形判断

题目定义一个函数,判断三个整型边长能否构成三角形,如果能判断它是否是直角三角形相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;bool isTriangle(int a, int b, int c){ if (a+b>c && a+c>b && b+c>a) return true; else return false;

2021-01-27 11:22:28 273

原创 鞍点

题目定义一个二维数组,数组维度由用户输入,通过函数求数组的鞍点 (二维数组的鞍点就是该位置上的元素在该行上是最大而在该列上是最小,数组可能没有鞍点),函数参数分别为指针和引用的传址方式;相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;int n, m;void inputSaddlePoint1(int **a, int **b){ bool flag = false; for (int i = 0;

2021-01-27 11:21:14 708

原创 约瑟夫问题

题目约瑟夫 (Josephus) 问题:n 个人围坐成一圈,从 1 开始顺序编号;游戏开始,从第一个人开始由 1 到 m 循环报数,报到 m 的人退出圈外,问最后留下的那个人原来的序号。相关阅读相关阅读完整代码#include<bits/stdc++.h>using namespace std;int main(){ int n, m, s[999]; memset(s, 0, sizeof(s)); cin >> n >> m;

2021-01-27 11:20:04 227 1

原创 回文数

题目输入一个正整数,判断它是否为回文数,所谓回文数即正读和反读都是一样的数,如 12321、56465 都是回文数。完整代码#include<bits/stdc++.h>using namespace std;bool isPalindromeNumber(int n){ int temp = n; int sum = 0; while (temp != 0){ sum = sum*10 + temp%10; temp /= 10

2021-01-27 11:16:51 542 1

原创 超快速排序

介绍给定一个长度为n的序列a,如果只允许进行比较和交换 相邻两个数的操作,求至少需要多少次交换才能把a从小到大排序思想只通过上述方法实际上就是使用冒泡排序,每一交换实际上就是两个相邻的数构成了逆序对,因此总共需要交换的次数就是序列a中逆序对的个数完整代码#include <iostream>using namespace std;void input(int arr[], int size){ for(int i = 0; i < size; i++)

2021-01-25 11:52:47 328

原创 逆序对问题

介绍在一个数组中,左边的数如果比右边的数大,则这两个数构成一个逆序对,请打印所有逆序对思想利用归并排序的过程,当左半部分的数比右半部分的数大时,构成逆序对,此时左半部分之后的数也与右半部分当前位置的数构成逆序对完整代码#include <bits/stdc++.h>using namespace std;long long merge(int arr[], int L, int mid, int R){ long long result = 0; int *help

2021-01-25 11:00:28 236

原创 小和问题

介绍在一个数组中,每个数左边比当前数小的累加起来,叫做这个数组的小和。求一个数组的小和。思想这道题是归并排序(点击链接查看归并排序有关内容)的典型应用,不难发现,在归并排序的过程中,我们将数组分为左右两个部分,分别进行排序,最后通过外排的方式,使得左右两个部分整体有序我们可以在外排这个过程中求出小和:即当左半部分的一个数小于右半部分的一个数时,那么一定构成小和,并且由于右半部分是从小到大有序的,因此右半部分这个数之后的所有数都与左半部分当前这个数构成小和完整代码#include <bit

2021-01-25 09:44:15 135

原创 C/C++实现归并排序

思想将一个数组的左半部分先排好序,然后再将右半部分排好序然后通过外排的方式将左右两个部分整体排好序外排,即额外使用一个辅助数组,使整体有序归并操作merge()实现外排template <class T> void merge(T arr[], int L, int mid, int R){ int size = R-L+1; T *helpArr = new T [size]; int p1 = L; int p2 = mid+1; int

2021-01-25 09:27:56 445 1

原创 行列排序矩阵找数

介绍有一个矩阵,它的每一行的数都是按照从小到大排好序的,每一列也是从小到大排好序的现在给出一个数,要求快速判断这个数在这个矩阵里面是否存在思想从第一行最后一列开始找curR,curC表示当前位置的横纵坐标有三种情况:(1)arr[curR][curC] == num,直接返回true(2)arr[curR][curC] > num,curC–(3)arr[curR][curC] < num,curR++直到走到最后一行的第一列还是没有找到该数,则返回false查找函数fin

2021-01-24 17:03:44 305

原创 旋转正方形矩阵

思想将整个旋转过程转化为由外向内逐层旋转使用四个指针LR,LC,RR,RC(LR,LC)标记正方形左上角位置坐标(RR,RC)标记正方形右下角位置坐标times = RR - LR用来计算这一层需要调换的次数旋转函数(顺时针旋转90°)void rotate(int **arr, int LR, int LC, int RR, int RC){ int times = RR - LR; for(int i = 0; i < times; i++){ int

2021-01-24 16:56:51 263

原创 螺旋打印矩阵

思想使用四个指针LR,LC,RR,RC(LR,LC)表示左上角位置坐标(RR,RC)表示右下角位置坐标将整个螺旋打印过程由外向内逐层打印打印函数void output(int **arr, int LR, int LC, int RR, int RC){ if(LR == RR){ for(int i = LC; i <= RC; i++){ cout << arr[LR][i] << " "; }

2021-01-24 16:51:47 209

原创 Z字打印矩阵

思想使用四个指针 LR,LC,UR,UC(LR,LC)是斜线最下方的坐标(UR,UC)是斜线最上方的坐标一个标记fromUP用来记录打印方向当fromUP为true时,从上至下打印反之,从下至上打印每次打印之后fromUP取反四个指针主要逻辑 int LR = 0, LC = 0; int UR = 0, UC = 0; bool fromUp = false; while(UR != n){ zPrint(arr, LR, LC, UR, UC,

2021-01-24 16:44:57 179 1

原创 Pygame 飞机大战

视频演示完整代码关注免费下载pygame实现飞机大战双人游戏

2021-01-24 16:16:37 106

原创 C/C++实现堆排序

思想首先将要排序的数组构建成一个大根堆结构(大根堆(数组实现))然后交换堆顶和堆的最后一个元素,堆的大小heapSize相应减一,由于堆顶是堆中最大的元素,因此该操作相当于取出最大的元素放到相应位置继续执行上述操作,直至堆的大小heapSize为零本文采用了排序对数器进行堆排序正确性验证相关阅读代码inputArr()实现数组输入void inputArr(int arr[], int size){ for(int i = 0; i < size; i++)

2021-01-24 16:12:11 411

原创 堆实现O(1)时间复杂度查询中位数

思想准备两个堆,一个大根堆,一个小根堆对于新来的一个数:(1)如果大于等于大根堆的堆顶,则放入小根堆(2)如果小于大根堆的堆顶,则放入大根堆(3)检查大根堆的大小与小根堆的大小是否相差小于等于1,如果大根堆大小减去小根堆大小大于1,则将大根堆的堆顶弹出放入小根堆;如果小根堆大小减去大根堆大小大于1,则将小根堆的堆顶弹出放入大根堆。即始终保证大根堆保存着较小n/2个数,小根堆保存着较大的n/2个数求中位数:(1)如果两个堆的大小相等,则中位数为两个堆的堆顶的平均值(2)如果两个堆的大小不相等,

2021-01-24 15:09:19 1052

原创 C/C++实现大根堆(数组实现)

思想利用一个一维数组通过下标来实现一个大根堆,大根堆其实就是一棵完全二叉树对于任意一个位置 i 上的节点,他的父节点下标为 (i-1)/2他的左孩子下标为 2i+1 , 他的右孩子下标为 2i+2对于0位置上的节点,(0-1)/2就是0,因此0位置上的节点的根节点就是他自己大根堆就是要保证每一棵子树的根节点是这棵树上最大的建立大根堆时间复杂度O(N)void swap(int arr[], int i, int j){ int temp = arr[i]; arr[i] =

2021-01-24 13:45:15 4084

FileTool.rar

解决VC++6.0添加文件奔溃问题

2021-04-23

cf-predictor.crx

codeforces rating 预测插件,拖动至Chrome即可安装

2021-02-08

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除