程序设计与算法(三)第九周测验(2018春季)

题目网址:http://cxsjsxmooc.openjudge.cn/2018t3springw9/

【1:Set】

用multiset记录当前整数集数据信息

用set记录曾被加入集合的数

 1 #include <iostream>
 2 #include <set>
 3 #include <string>
 4 using namespace std;
 5
 6
 7 int main()
 8 {
 9
10   multiset<int> s;
11   set<int> is;
12   string str;
13   int n,value;
14   s.clear();
15   cin>>n;
16   while(n--){
17       cin>>str>>value;
18       if(str=="add"){
19           s.insert(value);
20           cout<<s.count(value)<<endl;
21           is.insert(value);
22     }
23     else if(str=="ask"){
24         if(is.count(value)){
25             cout<<1<<" ";
26         }
27         else{
28             cout<<0<<" ";
29         }
30         cout<<s.count(value)<<endl;
31     }
32     else if(str=="del"){
33         cout<<s.count(value)<<endl;
34         s.erase(value);
35     }
36   }
37     return 0;
38 }

编程题 1:Set

【2:热血格斗场】

lower_bound(power)返回 第一个 元素(map里的元素)的key值大于等于power值 的迭代器

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 using namespace std;
 5
 6
 7 int main()
 8 {
 9     map<int, int> m;
10     m.insert(make_pair(1000000000, 1));
11     int n;
12     cin >> n;
13     while (n--) {
14         int id, power;
15         cin >> id >> power;
16         map<int, int>::iterator i;
17         i=m.lower_bound(power);
18         if (i == m.begin()) {
19             cout << id << " " << i->second << endl;
20         }
21         else {
22             map<int, int>::iterator p = i--;
23             if (power - i->first <= p->first - power) {
24                 cout << id << " " << i->second << endl;
25             }
26             else {
27                 cout << id << " " << p->second << endl;
28             }
29         }
30         m.insert(make_pair(power, id));
31     }
32     return 0;
33 }

编程题 2:热血格斗场

【3:冷血格斗场】

注意到相同实力值的人中,只有id号最小的那个人有可能与新人比赛,其他人可以当做不存在。

因此,这样实力值便各不相同,就仍用map即可

故需在考虑是否在map中插入新值:若新人的实力值已存在,则该实力值对应的新id为min{新人的id,该实力值当前的id};

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 using namespace std;
 5
 6
 7 int main()
 8 {
 9     map<int, int> m;
10     m.insert(make_pair(1000000000, 1));
11     int n;
12     cin >> n;
13     while (n--) {
14         int id, power;
15         cin >> id >> power;
16         map<int, int>::iterator i;
17         i = m.lower_bound(power);
18         if (i == m.begin()) {
19             cout << id << " " << i->second << endl;
20             if (power != i->first) {
21                 m.insert(make_pair(power, id));
22             }
23             else {
24                 if (id<i->second) {
25                     m[i->first] = id;
26                 }
27             }
28         }
29         else {
30             map<int, int>::iterator p = i--;
31             if (power - i->first < p->first - power) {
32                 cout << id << " " << i->second << endl;
33                 m.insert(make_pair(power, id));
34             }
35             else if (power - i->first > p->first - power) {
36                 cout << id << " " << p->second << endl;
37                 if (power != p->first) {
38                     m.insert(make_pair(power, id));
39                 }
40                 else {
41                     if (id<p->second) {
42                         m[p->first] = id;
43                     }
44                 }
45             }
46             else {
47                 cout << id << " ";
48                 if (i->second < p->second) {
49                     cout << i->second << endl;
50                 }
51                 else {
52                     cout << p->second << endl;
53                 }
54                 m.insert(make_pair(power, id));
55             }
56         }
57     }
58     return 0;
59 }

编程题 3:冷血格斗场

【4:编程填空:数据库内的学生信息】

【提示】

1、根据以下两句:

MyMultimap<string,int> mp;MyMultimap<int,string,less<int> > mp2;
这意味着模板类应有3个typename或class,并且第三个有默认值又根据 Print(mp.begin(),mp.end()); //按 姓名从大到小 输出应写一个自己的greater<typename>模板
2、
根据cout << * first 应该写一个template <typename T1, typename T2>ostream& operator << (ostream& os, pair<T1, T2> i) ;内容根据输出要求来写
3、根据mp.Set("Tom",78); //把所有名为"Tom"的学生的成绩都设置为78Set函数用 multimap的equal_range函数来实现

4、MyMultimap<string,int>::iterator p = mp.find(name);//这里::双冒号说明是在自定义的类中再定义一个类,class iterator  但可以发现iterator其实代表std::multimap<key,value>::iterator故在自己写的MyMultimap类中写一句typedef typename multimap<T1, T2>::iterator iterator;即可

本题也可参考博客https://blog.csdn.net/iamiman/article/details/53375357

 1 template<class T>
 2 struct myGreater {
 3     bool operator() (const T& x, const T& y) const { return x>y; }
 4 };
 5
 6 template <typename T1, typename T2,typename pred=myGreater<T1> >
 7 class MyMultimap {
 8 public:
 9     multimap<T1, T2,pred > m;
10     typedef typename multimap<T1, T2>::iterator iterator;
11     MyMultimap() {
12         m.clear();
13     }
14     void clear() {
15         m.clear();
16     }
17     void insert(pair<T1, T2> p) {
18         m.insert(make_pair(p.first, p.second));
19     }
20     typename map<T1, T2>::iterator begin() {
21         return m.begin();
22     }
23     typename map<T1, T2>::iterator end() {
24         return m.end();
25     }
26     void Set(T1 key, T2 value) {
27         typename map<T1, T2>::iterator i = m.equal_range(key).first;
28         typename map<T1, T2>::iterator i2 = m.equal_range(key).second;
29         while(i!=i2){
30             i->second=value;
31             i++;
32         }
33     }
34     typename multimap<T1, T2>::iterator find(T1 key){
35         return m.find(key);
36     }
37 };
38
39 template <typename T1, typename T2>
40 ostream& operator << (ostream& os, pair<T1, T2> i) {
41         os << "(" << i.first << "," << i.second << ")";
42         return os;
43  }

4:编程填空:数据库内的学生信息

原文地址:https://www.cnblogs.com/BUPT-Coffee/p/9064097.html

时间: 2024-10-13 18:19:45

程序设计与算法(三)第九周测验(2018春季)的相关文章

20172327 2018-2019-1 《程序设计与数据结构》第九周学习总结

20172327 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 无向图 1.图的概念(非线性结构):允许树中每个结点与多个结点相连,不分父子结点. 2.图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的定点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 3.无向图:顶点之间无序连接. 如:边(A,B)意味着A与B之间的连接是双向的,与(B,A)的含义一样. 4.邻接(邻居):两个顶点之间有边连接. 5.自

《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 图:图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的.与树的区别在于树中的一个结点只有一个前驱,也就是说只有一个父结点.但图中的顶点(结点)是没有这种限制关系的. 无向图:边为无需结点对的图.也就是说,现有两个顶点A.B.(A,B)与(B,A)效果相同.当两个顶点之间有边连接,也就是说这两个顶点是邻接的,也称作邻居.一个顶点

20172333 2018-2019-1 《程序设计与数据结构》第九周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.无向图 ①无向图的定义 图是由结点与结点相连接构成的,与树类似.这些结点被常常称作顶点(vertice),这些顶点的连接叫做边(edge). 无向图(undirected graph)是一种边为无序结点对的图. 两个顶点之间有一条连通边的顶点,我们称作它们为领接的(adjacent).这两个顶点也叫作邻居(neighbor),自己是自己的

2017-2018-20172309 《程序设计与数据结构》第九周学习总结

2017-2018-20172309 <程序设计与数据结构>第九周学习总结 一.教材学习内容总结 一些概念: 图: 是一种复杂的非线性数据结构. 图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为: G=(V, E) 其中: V 是顶点的有穷非空集合, E 是 V 中顶点偶对(称为边)的有穷集. 通常,也将图 G 的顶点集和边集分别记为 V(G) 和 E(G) . E(G) 可以是空集.若 E(G) 为空,则图 G 只有顶点而没有边. 有向图: 若图 G中的每条边都是有方向的,则称

20172311《程序设计与数据结构》第九周学习总结

20172311<程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 堆(heap)就是具有两个附加属性的一颗二叉树 1.它是一颗完全树 2.对每一个节点,它小于等于或者大于等于其左孩子和右孩子 HeapADT的UML描述 addElement方法将给定的Comparable元素添加到堆中的恰当位置处,且维持该堆的完全性属性和有序属性 因为一个堆就是一颗完全树,所以对于插入的新节点而言,只存在一个正确的位置,且它要么是h层左边的下一个空位置,要么是h+1层左边的第一个位置(如果

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20172326 《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

20172322 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In

20172311 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172311 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本周对异常和递归进行了学习 异常的处理方式有两种:一种是直接抛出,并从异常处终止程序:另一种是捕获并处理异常,从而使程序继续运行. 捕获和处理异常主要运用try-catch语句. 通过继承Exception类可以自定义一个新的异常 处理IO异常的常用方法是抛出异常. 对于某些问题,递归是最精炼和适当的解法,但对于其他问题,递归则不如迭代方法直接. 教材学习中的问题和解决过程 问题:什么是IO操作