程序设计实习MOOC / 程序设计与算法(三)
笔记
Simon_Paul
这个作者很懒,什么都没留下…
展开
-
044:编程填空:数据库内的学生信息
题目:OpenJudge - 044:编程填空:数据库内的学生信息分析:这道题虽然是MyMultimap,但主要是考察继承类和multimap,一开始是想到了用multimap去套,但没想到要用继承,自己写了半天的函数,时间不说还报错(哭晕在厕所。。。)后来参考一些博主的题解才发现直接用继承关系= =。还有一点是要清楚map或者multimap里面每一个元素是一个pair<class a,class b>,这样在print的时候就知道形参是pair<class a,cla.原创 2021-05-11 09:39:04 · 1331 阅读 · 0 评论 -
043:冷血格斗场
题目:OpenJudge - 043:冷血格斗场分析:multimap的应用,挺折腾的,不论是map还是multimap,内容一多就会崩,就像这一题,如果不进行选择性录入信息的话直接是 Time Limit Exceeded。这一次比042:热血格斗场_Simon博的博客-CSDN博客的条件增加了一个,就是实力值可以相同,而且绝对差一样的话就选择id值小的那个。根据这个条件,不要把所有的会员信息都录入multiset中,只录入相同实力值 id最小的那一个。参考代码:#includ.原创 2021-05-08 17:01:50 · 378 阅读 · 0 评论 -
042:热血格斗场
题目:OpenJudge - 042:热血格斗场分析:本题是map的应用,只需将实力设为关键字,id设为值,便可在每插入一个会员信息后(map按关键字自动从小到大排序)通过比较前后元素的关键字(frist)来判断比赛对手。参考代码:#include<iostream>using namespace std;#include<map>int main(){ int n; cin >> n; map<int,int&原创 2021-05-08 10:11:40 · 689 阅读 · 0 评论 -
041:Set
题目:OpenJudge - 041:Set分析:这题就是按部就班的实现题目的要求。因为题目要求可重复,那么用到multiset。 add x 把x加入集合( insert( ) ),输出操作后集合中x的个数( count( ) ); del x 把集合中所有与x相等的元素删除(这里我用的是循环检测x( find(x) ),其实也可以利用删除后指针往后移的特性),输出操作前集合中x的个数( count( ) ); ask x 对集合中元素x的情况询问,ask 先输出0或1表示x是否曾.原创 2021-05-08 09:00:05 · 208 阅读 · 0 评论 -
040:List
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/040/分析:list的应用,可参考老师上课课件里面的示例。有几个点是:list<int>::iterator 前面要加typename,视频里也讲了这个问题。参考代码:#include<iostream>#include<list>#include<string>using namespace std;void print原创 2021-04-28 11:52:48 · 176 阅读 · 0 评论 -
039:我自己的 ostream_iterator
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/039/分析:这题很郭炜哈哈。下面一一分析:myostream_iteraotr<int> output(cout,",");可以看到我们需要定义一个模版类,构造函数参数是一个ostream对象和string对象(这里主要是下面还有传入“--”的,用char不好处理,而且头文件也给出了string,不用白不用)。Copy( lst.begin(),lst.end(),原创 2021-04-28 09:18:09 · 713 阅读 · 3 评论 -
038:白给的list排序
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/038/分析:嗯。。。这道题,如果你认识就白给,不认识的话也就白给greater<> ()greater<double> ()这里面填的比较函数,在本地<>里缺省也能过,但是openjudge上就会编译出错,后来看了下其他博主的题解才发现里面还需要确定一个类型double(要排序的类型)。参考代码:#include <cstdio&原创 2021-04-27 13:57:00 · 521 阅读 · 0 评论 -
037:函数对象的过滤器
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/037/分析:这道题首先是判断要写什么。从以下代码段中可知vector<int>::iterator p = Filter(ia.begin(),ia.end(),ib.begin(),FilterClass<int>(m,n));T2 Filter( T1 s,T1 e, T2 s2, T3 op)if( op(*s))要写的是一个作用是接收一个类型.原创 2021-04-27 11:08:37 · 365 阅读 · 0 评论 -
036:很难蒙混过关的CArray3d三维数组模板类
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/036/分析:说实话这道题知识点都不难,难就难在新,在模版类里面建类(写完之后才发现老师在视频里讲过这种情况,所以,遇到问题应该先翻翻讲义。)思路:本质上是将一个一维数组折叠成一个三维数组,难点主要是在三个 “[ ]” 怎么处理,第一个[ ] 在 CArray3D 类中返回CArray2D类,然后第二个[ ] 再在 CArray2D类 中返回一个数组指针,第三个[ ]则直接根据上一步的指针.原创 2021-04-27 09:46:59 · 889 阅读 · 2 评论 -
035:按距离排序
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/035/分析:这题好像没什么特别的?注意一点是sort()函数中的参数comp,也就是比较函数,返回0的时候表示需要调整位置,返回1的时候表示无需调整(简记:0表示无序,1表示有序)。还有一点:sort(a,a+10,Closer<int ,int (*)(int ,int)> (n,Distance1));//这里面的Closer<int ,int (*)(i原创 2021-04-27 09:20:42 · 480 阅读 · 0 评论 -
034:goodcopy
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/034/分析:这道题是简单的模版函数,有一个注意的点是GoodCopy<int>()(a,a+m,a+m/2);GoodCopy<string>()(c,c+m,c+m/2);这两条语句相当于将数组原地往后挪m/2个位置,如果顺序复制的话 m/2 - m这段位置的数据会丢失,逆向复制可以解决这个问题。这其中又涉及一个知识点,就是同一数组内两指针相减,得到的原创 2021-04-23 09:26:43 · 352 阅读 · 0 评论 -
033:排序,又见排序!
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/033/分析:函数模版的基础应用,函数模版参数表中有变量和函数,分清指针和变量就好。参考代码:#include <iostream>using namespace std;bool Greater2(int n1,int n2){ return n1 > n2;}bool Greater1(int n1,int n2){ return n原创 2021-04-22 11:21:10 · 284 阅读 · 0 评论 -
032:这个模板并不难
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/032/分析:这个模版真的不难,就是写构造函数,模版类和类的写法基本一致。但这题犯了混,本地没事,提交就Runtime Error,检查了好多遍后才发现。。。有兴趣的话分析一下代码哈,看为什么,也算巩固以下。参考代码:#include <iostream>#include <string>#include <cstring>using name原创 2021-04-22 09:15:20 · 777 阅读 · 5 评论 -
031:山寨版istream_iterator
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/031/分析:这道题看到这一条代码的时候就开始懵了CMyistream_iterator<int> inputInt(cin);仔细一看,不过是模版类设置成int类型,然后以cin为初始化参数。然后后面的一些就是运算符的重载。这道题的难点在于要拐过弯来,不用在初始化的时候把全部数据读进来,也不需要存储每一个读进来的数据。(详见参考代码)还有一点是会 Runtim原创 2021-04-21 10:31:14 · 975 阅读 · 0 评论 -
030:你真的搞清楚为啥 while(cin >> n) 能成立了吗?
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/030/分析:这里面有前面学过的运算符“<<”的重载和强制运算符转换的重载(第七周-1-06:50)(题目所问原因),其作用是将 while( m >> n1 >> n2) 语句中m读取完成后返回的 MyCin类型变量强制转换成bool变量。参考代码:#include <iostream>using namespace std;c原创 2021-04-20 11:22:04 · 729 阅读 · 0 评论 -
029:简单的Filter
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/029/分析:这一题仍然是对函数模版基本概念的考察,在前两题的基础上再增加了一个参数。参考代码:#include <iostream>#include <string>using namespace std;// 在此处补充你的代码template<class T,class Pred>T * Filter(T * p,T * q,T *原创 2021-04-20 10:12:34 · 208 阅读 · 0 评论 -
028:简单的foreach
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/028/分析:仍然是函数模版的基本应用,添加了在模版函数的形参表中使用函数的做法。参考代码:#include <iostream>#include <string>using namespace std;// 在此处补充你的代码template <class T, class Pred>T MyForeach(T * p,T * q, Pr原创 2021-04-20 10:03:46 · 359 阅读 · 0 评论 -
027:简单的SumArray
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/027/分析:这道题考的是函数模版的基本概念,要注意的点是模版函数形参表的类型(指针还是变量,一般来说都是指针,按照main中的调用来写),然后其他的就按函数的写法写即可。参考代码:#include <iostream>#include <string>using namespace std;template <class T>T SumAr原创 2021-04-20 09:59:51 · 214 阅读 · 0 评论 -
026:编程填空:统计动物数量
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/026/分析:这题考的是静态成员和虚函数以及派生类成员覆盖基类成员的特性。本题的要点是:如果要在类外访问静态成员,则必须把这个静态成员放在public中。 当派生类成员中有覆盖基类成员(同名)时,在派生类中访问成员时要加上类名前缀。 虚拟化析构函数,实现使用基类指针下析构派生类。 静态变量一定要记得初始化!!!在全局中作初始化即可。参考代码:#include <iostr原创 2021-04-13 10:11:17 · 513 阅读 · 0 评论 -
025:怎么又是Fun和Do
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/025/分析:还是用基类指针指向派生类对象的问题,根据输出,可以看到,当Call()里面是类A对象时全部执行类A的函数,而当Call()里面是类C对象时,执行的是类A的Fun函数,类C的Do函数。纵观三个类的内部函数,可以发现,只有Do函数是虚函数。分析与023:Fun和Do 类似,但要注意的是,基类指针能指向派生类对象,但派生类对象指针是不可以指向基类对象的!参考代码:#includ原创 2021-04-13 08:56:11 · 491 阅读 · 0 评论 -
024:这是什么鬼delete
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/024/分析:这题没什么好分析的,就是虚函数的应用。pa是类A指针,在new B的时候会调用类A对象的构造函数(类B是类A的派生类),那delete pa的时候,会调用析构函数,根据虚函数的特性,pa指向的是类B对象,故调用类B的析构函数,然后根据先析构派生类后析构基类的准则,再调用类A的析构函数。参考代码:#include <iostream>using namespa原创 2021-04-11 10:58:30 · 534 阅读 · 0 评论 -
023:Fun和Do
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/023/分析:这里面只填了一个“ B & p” ,但知识点还是有的,根据输出,既访问了类A的成员函数,也访问了类C的成员函数。p.Fun() 输出A::Fun, 从代码可以看到,Fun并不是多态函数,那要访问A的Fun函数有两种方法,一是直接从类A访问,二是从派生类B访问基类的public成员函数。p.Do() 输出C::Do,看到类A中的Do并不是多态,而B中的Do是多态,..原创 2021-04-11 10:30:58 · 605 阅读 · 2 评论 -
022:看上去像多态
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/022/分析:这题还挺有意思的,利用了基类指针能指向派生类成员,但只能访问基类部分数据的这个特点,实际上像题目上用基类指针指向派生类对象但又不是多态的做法是错误的,不过郭炜老师的题中这样的题目比比皆是,利用这种“错误”用法去让我们记住这种用法是不正确的。参考代码://emmm...大家忽略我山寨的英语注释,因为写代码时切换中英输入法挺麻烦的,顺便还能练习一下哈,大伙凑合凑合。#inc原创 2021-04-11 10:00:46 · 416 阅读 · 0 评论 -
021:魔兽世界之二:装备
题目:http://cxsjsxmooc.openjudge.cn/2021t3springall2/021/分析:本题主要是在 “ 魔兽世界之一 ” 的基础上增加了装备系统,需要新增一个武器类(包括基类和派生类),然后由于需要对每个武士的装备和状态进行输出,所以需要用到多态(virtual)。下面给我写的代码以及郭老师的代码以供参考(我觉得参考他人特别是高手的代码不仅可以学习到其思想,还能学习到他人优秀的编码风格)。完整代码:#include<iostream>us原创 2021-04-11 09:47:42 · 1463 阅读 · 2 评论 -
020:继承自string的MyString
分析:这题主要的点在于构造函数,因为是用MyString类去扩展string类,在构造函数中要考虑到每一个类型的构造函数。然后根据提示对“()”进行重载即可。完整代码:#include <cstdlib>#include <iostream>#include <string>#include <algorithm>using namespace std;class MyString:public string{// 在此处补充你的代原创 2021-04-11 09:38:49 · 717 阅读 · 0 评论 -
019:全面的MyString
题目:程序填空,输出指定结果#include <cstdlib>#include <iostream>using namespace std;int strlen(const char * s) { int i = 0; for(; s[i]; ++i); return i;}void strcpy(char * d,const char * s){ int i = 0; for( i = 0; s[i]; ++i) d[i] = s[i]; d原创 2021-04-06 16:01:24 · 614 阅读 · 0 评论 -
018:别叫,这个大整数已经很简化了!
题目:程序填空,输出指定结果#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std;const int MAX = 110; class CHugeInt {// 在此处补充你的代码};int main() { char s[210]; int n; while (cin >&.原创 2021-04-04 10:52:47 · 1175 阅读 · 0 评论 -
017 二维数组类
这题没有get到点的话还挺麻烦的。关键在于做一个数组指针的指针。分析:1⃣️ Array2 a(3,4); //构造函数,两int型参数,Array2是二维数组形式。2⃣️ a[i][j] = i * 4 + j; //a[i][j] 在C++里相当于:a,operator[](i).operator[](j) 但是用上面说的数组指针的指针则不用这么麻烦,只需重载 “ [ ] ” 即可,详见code。3⃣️ cout << a(i,j) << ",...原创 2021-04-03 16:00:49 · 2816 阅读 · 11 评论 -
016 惊呆!Point竟然能这样输入输出
流插入运算符和流提取运算符的重载的简单例子。分析:1. cin >> p //需重载">>"2. cout << p << endl; //需重载"<<"以下是完整代码:#include <iostream>using namespace std;class Point {private: int x; int y;public: Point() { };// 在此处补充你的...原创 2021-04-03 09:18:42 · 323 阅读 · 0 评论 -
015:看上去好坑的运算符重载
确实坑。分析:1. MyInt objInt(n); //构造函数,已定义2. objInt-2-1-3; //需重载"-",补。3. cout << Inc(objInt); //已定义Inc函数, 坑:1.将Inc定义为友元(错)。2.需要重载"()"(错)。3.重载Inc函数(yes。。。)以下是完整代码:#include <iostream>using namespace std;class MyInt { int nVal;publ.原创 2021-04-03 08:57:25 · 337 阅读 · 0 评论 -
014:MyString
这题其实是缺什么补什么。MyString s1(w1); //需要构造函数,已给出。MyString s2 = s1; //需要复制构造函数,补。MyString s3(NULL); //需要构造函数,已给出。s3.Copy(w1); //需要一个.copy函数,补。cout << s1 << “,” << s2 << “,” << s3 << endl; //cout不能输出类,需重载“<<”,补。s2 =原创 2021-04-02 09:35:55 · 183 阅读 · 0 评论