
------C++------
C++相关题解、知识点汇总。
Daniel Mui
八边形战士
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【PTA】 7-2 租用游艇问题
题目来源:王晓东,《算法设计与分析》长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j<=n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n所需的最少租金。解题思路:1、这是一道动态规划的题,先看输入,第i行表示第i站到第 i+1 站,第 i+2 站, … , 第 n 站的租金,也就是说,我们可以将它转化为倒三角的形式。2、接着,原创 2021-10-19 14:46:26 · 1260 阅读 · 0 评论 -
分治,分而治之
分治思想是一种追求高效率的算法思想。基本概念分治,分而治之,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这种朴素的思想来源于人们生活与工作的经验,也完全适用于技术领域。适用条件1、问题的规模缩小到一定的规模就可以较容易地解决。2、问题可以分解为相同类型的子问题,具有最优子结构性质。3、合并问题分解出的子问题的解可以得到问题的解。4、问题所分解出的各个子问题之间是独立的,即子问题之间不存在公原创 2021-08-25 22:57:14 · 447 阅读 · 0 评论 -
八皇后问题
八皇后问题是经典的回溯问题。问题表述在 8×8 格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。当我们选择了第一个皇后的位置之后,与其处于同行同列同斜线的位置便都无法被选择,第二个皇后只能放在未被第一个皇后所辐射到的位置上。接着放置第三个皇后,同样不能放在被前两个皇后辐射到的位置上,若此时已经没有未被辐射的位置能够被选择,也就意味着这种摆法是不可行的,我们需要回退到上一步,给第二个皇后重新选择一个未被第一个皇后辐射的位置,再来看是否原创 2021-08-23 10:22:58 · 544 阅读 · 0 评论 -
C++编程规范总结——对美感的追求
一、版权&版本声明版权声明可以按照以下格式说明:1、版权信息2、文件名称,标识符,摘要3、当前版本号,作者,完成日期4、版本历史信息* Copyright (c) 2021,google* All rights reserved.* * 文件名称:fileName.h* 摘 要:简要描述本文件的功能和用法* * 当前版本:1.1* 作 者:输入作者(或修改者)名字* 完成日期:2021 年 8 月 1 日* * 取代版本:1.0* 原作者 :输入原作者(或修改者)名原创 2021-08-03 09:23:00 · 478 阅读 · 1 评论 -
【洛谷】 P2670 [NOIP2015 普及组] 扫雷游戏
扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。#include<bits/stdc++.h原创 2021-07-24 09:12:53 · 767 阅读 · 1 评论 -
【洛谷】P1012 [NOIP1998 提高组] 拼数
设有 n 个正整数a1 …an ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。#include<bits/stdc++.h>using namespace std;string a[1000];bool cmp(string a,string b){ return a+b>b+a; //利用字符串相加的特性判断大小 }int main(){ int n; cin>>n; for(int i=1;i<=n;i++)原创 2021-07-23 09:55:30 · 300 阅读 · 0 评论 -
【PTA】 7-1堆排序
对n个数,要求用堆排序(最大堆)对其进行排序。#include<bits/stdc++.h>using namespace std;int n,N=1000;int a[10000];void HeapAdjust(int a[],int s,int m) //筛选法调整堆 { int x=a[s]; for(int j=2*s;j<=m;j*=2) { if(j<m && a[j]<a[j+1]) j++原创 2021-06-23 11:03:09 · 3754 阅读 · 0 评论 -
【C++】 类和对象期末复习笔记(四)——多态性
引言前面两篇基础篇和一篇继承篇已经完工,地址如下????基础篇:笔记一笔记二继承和派生篇:笔记三正文1、多态:分为静态多态和动态多态1)静态多态:函数重载、运算符重载、模板。2)动态多态:也称运行时多态,在程序运行阶段才能确定关系.C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。2、函数重载1)函数重载:赋予一个函数名多个含义2)一般而言,重载函数是功能相似的一组函数,它们提供了使用相同功能的不同形态。3、运算符重载1)运算符重载通过定义运算符重原创 2021-06-06 11:41:07 · 270 阅读 · 0 评论 -
【C++】 类和对象期末复习笔记(三)——继承和派生
引言:前面已经写了两篇基础篇笔记,这一篇是继承和派生专题。前两篇笔记地址如下????笔记一笔记二正文:1、继承分为单一继承和多重继承单一继承:派生类仅由一个基类派生多重继承:派生类由多个基类派生2、继承方式:公有继承(派生)public、保护继承(派生)protected、私有继承(派生)private例:class B public:A{ ...... };class B protected:A{ ...... };class B private:A{ .原创 2021-06-05 11:50:47 · 451 阅读 · 3 评论 -
【C++】 类和对象期末复习笔记(二)
引言续上一篇笔记,上一篇笔记的地址在这????笔记一正文1、静态成员1)静态数据成员a.若将类的一个数据成员定义成静态型的,则该类的所有对象的该成员共用同一存储空间b.定义方法:前头加关键字static例:class Sample{private: int a,b,c; static int d; //静态数据成员 };c.静态数据成员必须在类体外初始化,不需要加staticPS:若在类外初始化时没有赋一个确切的值,则默认初值为0d.静态数据成员是属于原创 2021-06-04 13:31:27 · 265 阅读 · 1 评论 -
【C++】 定义数组类模板
题目:定义数组类模板,能够对数组元素进行排序、倒置、查找和求和,产生类型实参分别为int型和double型的两个模板类。从键盘输入数据到整型数组与双精度数组中,创建两个数组类对象,分别对整型数组与双精度型数组对象完成上述操作。#include<bits/stdc++.h>using namespace std;#define MAXSIZE 100template<class Type>class Array{ int len,z; Type a[M原创 2021-06-04 11:15:48 · 1581 阅读 · 0 评论 -
【C++】类和对象期末复习笔记(一)
引言:马上就是期末周了,为了复习巩固C++的内容,就做点笔记回顾一下知识点吧。正文:1、什么是类和对象?对象是对客观事物的抽象,可以说是类的变量,类是对对象的抽象,是一种抽象的数据类型。对象是类的实例,类是对象的模板。2、类的三个基本特征封装、继承、多态3、面向过程和面向对象的区别面向过程:程序=函数+调用面向对象:程序=对象+交互4、类的数据成员的三种访问权限1)私有(private):只允许类内成员函数存取它2)保护(protected):允许类内和其他派生类函数存取它3)公有原创 2021-06-02 22:31:15 · 433 阅读 · 0 评论 -
【PTA】 类和对象——6-3 点和线段
已知表示点的类CPoint和表示线段的CLine类, 类CPoint包含:(1)表达点位置的私有数据成员x,y (2)构造函数及复制构造函数 类CLine包含: (1)两个CPoint的点对象(该两点分别为线段的两个端点) (2)构造函数(提示:构造函数中用初始化列表对内嵌对象进行初始化) (3)公有成员函数GetLen,其功能为返回线段的长度,返回值类型为整型 (4)类属性成员count用于记录创建的CLine类对象的个数,及用于显示count值的ShowCount函数; 要求: (1)实现满足上述属性和原创 2021-05-27 16:43:17 · 1408 阅读 · 2 评论 -
【PTA】 类和对象——6-2 车的不同行为
定义一个车(vehicle)基类,有虚函数Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,它们都有Run、Stop等成员函数。完成这些类使得主函数可以运行并得到正确的输出结果。函数接口定义:完成类代码。裁判测试程序样例:/* 请在这里填写答案 */int main(int argc, char const *argv[]){ Vehicle veh; Bicycle bic; Motorcar mot; run(veh原创 2021-05-27 16:37:00 · 2539 阅读 · 2 评论 -
【PTA】 类和对象——6-1 Point类的运算
定义Point类,有坐标x,y两个私有成员变量;对Point类重载“+”(相加)、“-”(相减)和“==”(相等)运算符,实现对坐标的改变,要求用友元函数和成员函数两种方法实现。对Point类重载<<运算符,以使得代码 Point p; cout<<p<<endl;可以输出该点对象的坐标。函数接口定义:实现Point类。裁判测试程序样例:/* 请在这里填写答案 */int main(int argc, char const *argv[]){ Poi原创 2021-05-27 16:33:24 · 1507 阅读 · 0 评论 -
【类和对象】 多态——定义几何图形抽象类Shape
题目:#include<iostream>#include<iomanip> using namespace std;#define PI 3.1415926class Shape //抽象类,包含两个纯虚函数{public: virtual float Area() = 0; virtual void SetData(float, float = 0) = 0;};class Triangle :public Sha原创 2021-05-15 20:59:07 · 1286 阅读 · 0 评论 -
【类和对象】多态——定义矩阵类Matrix
题目:#include <iostream>using namespace std;class Matrix{ int* p, rows, cols;public: Matrix(int r = 0, int c = 0) //构造函数,初始化数组的行数和列数 { rows = r, cols = c; p = new int[rows * cols]; //用一维数组存放二维数组 } Matrix(const Matrix&原创 2021-05-15 20:56:30 · 3364 阅读 · 0 评论 -
C++大作业——实验室成员管理系统(继承)【附源代码】
实验目的:开发一个实验室成员管理系统,取代结构体类型,定义教师类和学生类。定义实验室类,将所有教师和学生作为成员,建议将所有成员数据的访问权限定义为private。实验要求:引入类、对象、构造函数等面向对象编程因素,通过编程加深对“封装”的认识,掌握类、对象、成员函数、构造函数的定义与使用。为教师类和学生类定义一个共同的基类Member,将它们共同的成员数据和函数封装到基类Member中。基类Member数据成员的访问属性可定义为protected,便于派生类中直接访问。教师类和学生类作为Member的派原创 2021-05-15 20:43:27 · 2192 阅读 · 0 评论 -
C++头文件汇总
#include <algorithm> //STL通用算法#include <bitset> //STL位集容器#include <cctype> //字符处理#include <cerrno> //定义错误码#include <clocale> //定义本地化函数#include <cmath> //定义数学函数#include <complex&g原创 2021-05-15 20:20:04 · 259 阅读 · 0 评论 -
C++ string类(C++字符串)完全攻略
转载,感觉挺有用的。攻略传送门转载 2021-04-25 19:59:11 · 131 阅读 · 0 评论 -
数据结构中存储和存取的区别
复习数据结构的时候遇到了这两个词,就想着记录一下,因为我起初有点混淆了emmm……一、存取结构存取结构分为顺序存取和随机存取顺序存取:不能通过下标访问,只能按照存储顺序存取,与存储位置有关,例如链表。随机存取:可以理解为直接存取,可以通过下标直接访问,与存储位置无关,例如数组。顺序存取就是存取第n个数据时,必须先访问前(n-1)个数据 。随机存取就是存取第N个数据时,不需要访问前(n-1)个数据,直接就可以对第N个数据操作。存储结构分为顺序存储和随机存储顺序存储:在计算机中用一组地址连续的存原创 2021-04-25 13:54:05 · 5200 阅读 · 6 评论 -
【类和对象】 继承和派生——定义Date类和Time类并派生出DateTime类
题目:#include<bits/stdc++.h>using namespace std;string itoa(int n, string &s) //这里用string代替了char类型 { string a; int n1=n,t; while(n1) { t=n1%10; n1/=10; switch(t) { case 0: a+="0";break; case 1: a+="1";break; ca原创 2021-04-18 14:02:50 · 2327 阅读 · 0 评论 -
【类和对象】 继承和派生——定义Person类并派生出Student和Teacher类
题目:#include<iostream>#include<iomanip>#include<string>using namespace std;//定义人员类 class Person{ protected: string Id; string Name; char Sex; string Address; string Tel; string Email; //设置成员信息 public: void SetI原创 2021-04-18 13:58:45 · 5052 阅读 · 0 评论 -
【PTA】 括号匹配
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。在这里插入图片描述这题用栈来写,我是不想用传统写法(好麻烦),所以定义一个栈就好了。基本思路:1、若输入的为左括号,进栈。2、若输入的为右括号,先判断是否栈空,空说明右括号多了,不符合题意;若栈不空,则与栈顶的左括号比较,若能匹配,弹栈(弹出栈顶的左括号)。3、假设全部括号都能正确匹配,则最后栈一定是空的,所以当栈为空且flag不为0时输出。#include&l原创 2021-04-11 15:08:24 · 3493 阅读 · 0 评论 -
【PAT】(Basic Level) Practice 1005 继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖原创 2021-04-09 21:50:03 · 167 阅读 · 0 评论 -
【PAT】 (Basic Level) Practice 1002 写出这个数
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。方法一:基本思路:1、把输入的数字当作字符串处理,利用ASCII码转换为数字,求和。2、对求和结果作进一步处理,在循环中取模再除以10,这是一个常用的操作,取得sum的每一位数字,存入一个新数组c中(注意此时每一位数字是逆序存入数组的)。这里有个坑,sum=0的情况需要单独判断,因为当sum=0时是无法进行以上操作的。3、最后逆序依次处理数组c中的数字,建议用switch,不要漏了最后一位不用接空格和sum=0的情况。#原创 2021-04-06 20:45:12 · 121 阅读 · 0 评论 -
【PAT】(Basic Level) Practice 1009 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。这题乍一看挺简单,思路就是输入一行字符串,然后根据空格分隔单词,将每个单词存到一个新数组里,最后逆序输出即可。可是……我自己用一维数组写不出,裂开。看到一个大佬用二维数组写的,orzorz有亿点点看不懂,为什么会想到用二维数组写,以后想到了再来补充吧。#include<bits/stdc++.h>using namespace std;int main() { string a; getline(cin原创 2021-04-02 21:33:04 · 179 阅读 · 0 评论 -
【PTA】 类和对象 计算点到直线的距离一一友元函数的应用
计算点到直线的距离。首先设计一个点类Point,它有2 个私有数据成员x和y,表示点的坐标。另一个类为直线类Line,它有3 个私有数据成员a,b和c,表示直线方程ax+by+c= 0。这两个类中都说明了一个友元函数dist,用于计算一个点到直线的距离。点(x.y)到直线ax+by+c=0的距离d的计算公式如下:注意:1、main函数中要先输入再创建对象,否则过不了。2、要考虑距离等于0的特殊情况!#include<bits/stdc++.h>using namespace st原创 2021-04-02 21:22:34 · 2669 阅读 · 1 评论 -
【PTA】 类和对象 计算全班学生C++课程的总成绩和平均成绩
定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。题解见注释。#include<bits/stdc++.h>using namespace std;class Student{ int score; static int sum; //定义静态数据成员 public: Student(int s=0):score(s) //等价于Student(int s=0){原创 2021-04-02 21:17:50 · 1287 阅读 · 0 评论 -
【PAT】 (Basic Level) 1003 我要通过!
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:1、字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;2、任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3、如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字原创 2021-04-01 22:09:23 · 133 阅读 · 0 评论 -
C++大作业——商品管理系统【附源代码】
这一次我打算记录一下上学期期末老师让我们完成的一个大作业,就是一个商品管理系统的实验,花了不少时间呢,因为当时我很菜 。完成这个实验感觉对函数的运用提高了,最显著的一个益处就是我对结构化编程有点感觉了(毕竟是第一次打三百多行代码嘛……)俗话说,学习C++的人,第一个精通阶段是会写一些数学题,第二个精通阶段就是会写管理系统啦,各位朋友都可以学习一下如何结构化编程,一是美观,二是有条例和逻辑性,三是合理利用函数、提高运用函数能力。(当然不是学我,我的代码写得勉勉强强)包括以后的类和对象亦是如此,封装是C+原创 2021-03-31 23:21:05 · 9572 阅读 · 4 评论 -
【洛谷】 P1598 垂直柱状图
写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。输入样例THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.THIS IS AN EXAMPLE TO TEST FOR YOURHISTOGRAM PROGRAM.HELLO!输出样例 *原创 2021-03-30 00:38:54 · 976 阅读 · 0 评论 -
【洛谷】 P1308 统计单词数
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。这题我还没弄懂,借鉴了大佬的题解,仅供参考。#include<bits原创 2021-03-29 13:30:31 · 242 阅读 · 0 评论 -
【洛谷】P1125 笨小猴
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。说明/提示【输入输出样例1解释】单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。【输原创 2021-03-28 10:57:23 · 718 阅读 · 0 评论 -
【洛谷】 P1597 语句解析
一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 0输出 a、b、c 的值。记录一下这道题,看似简单,我却挠头想了半天……(可能确实简单,是我太菜了)其实,只需利用ASCII码来做就行,关键是定义一个全为0的数组来存储输出的数。注意:题目说赋值可以是数字或一个变量,所以不要漏了赋值为变量的情况。#include<bits/stdc+原创 2021-03-28 10:34:50 · 574 阅读 · 0 评论 -
【洛谷】P1321 单词覆盖还原
一个长度为 l(3≤l≤255) 的字符串中被反复贴有 boy 和 girl 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy 几个 girl?记录一道大水题,没啥可说的,思路很简单。#include<bits/stdc++.h>using namespace std;int main(){ string a; int count1=0,count2=0; getline(cin,a); for(int原创 2021-03-28 10:27:18 · 569 阅读 · 0 评论 -
【洛谷】 P3741 honoka的键盘
honoka 有一个只有两个键的键盘。一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK 这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK 出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK(只有当 V 和 K 正好相邻时,我们认为出现了 VK。)这题用了分类讨论思想,先遍历一次字符串,找到VK后将其赋值为AA,计数器加一,然后在另一个循环中重新遍历字符串,若找到前后两个相同的字符则原创 2021-03-25 23:40:26 · 970 阅读 · 0 评论 -
【洛谷】 P1765 手机
一般的手机的键盘是这样的:要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。这道题直接暴力好吧(别想其他花里胡哨的做法)。分为按1下、2下、3下、4下、按0这五种情况,定义5个计数器对每种情况分别计数就好。注意别漏了空格(按0)的情况。#include<bits/stdc++.h>usin原创 2021-03-25 23:24:51 · 600 阅读 · 0 评论 -
【洛谷】 P5734 文字处理软件
你需要开发一款文字处理软件。最开始时输入一个字符串(不超过 100 个字符)作为初始文档。可以认为文档开头是第 0 个字符。需要支持以下操作:1 str:后接插入,在文档后面插入字符串 str,并输出文档的字符串。2 a b:截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串。3 a str:插入片段,在文档中第 a 个字符前面插入字符串 str,并输出文档的字符串。4 str:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。为了简化问题原创 2021-03-25 14:22:21 · 630 阅读 · 1 评论 -
【洛谷】 P1914 小书童——凯撒密码
某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 n 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 n,请你求出密码。内层循环很关键。有个坑点:当字母大于z时,要令数为a。#include<bits/stdc++.h>using namespace std;int main()原创 2021-03-22 22:31:20 · 1174 阅读 · 0 评论