1单选(1分)

1) 关于复制构造函数,下列说法正确的是

A. 系统不会生成缺省复制构造函数,因此必须自己实现

B. 复制构造函数是形如X::X(X)的函数

C.  Myclass c1, c2;  c1.n = 1;  c2 = c1;第三句将会调用复制构造函数

D. 调用函数A Func() {   A a(4);    return a;   }时,将会调用A的复制构造函数

正确答案:D

2)关于虚函数,下列说法不正确的是

  • A. 不允许以虚函数作为构造函数

  • B. 没有虚函数便无法实现多态

  • C. 一般来讲,如果一个类中定义了虚函数,则不可将析构函数也定义为虚函数

  • D. 不能用抽象类定义对象

正确答案:C

3) 关于 this 指针,以下说法不正确的是

  • A. static成员函数内部不可以使用this指针

  • B. 在构造函数内部可以使用this指针

  • C. 在析构函数内部可以使用 this 指针

  • D. const成员函数内部不可以使用this 指针

正确答案:D

4) 以下关于多态的说法那个不正确?

  • A.  在成员函数中调用虚函数,是多态

  • B.  通过“基类对象名.函数名"的方式调用虚函数,不是多态

  • C.  多态的函数调用语句中,函数一定是虚函数

  • D.  通过“基类引用名.函数名"的方式调用虚函数,是多态

正确答案:A

5)  map的每个元素包括KEY(first)和VALUE(second)。关于map容器,下列哪种说法错误

  • A.  map支持下标运算符

  • B.  map的不同元素可以有相同的VALUE

  • C.  map支持STL的sort算法

  • D.  map支持双向迭代器

正确答案:C

6)  下列说法错误的是

  • A.  可以在一个类的友元函数中使用this指针

  • B  每个类只有一个析构函数

  • C  抽象类至少包含一个纯虚函数

  • D  构造函数不可以是virtual函数

正确答案:A

7) 关于继承和派生的描述中,下列说法错误的是:

  • A. 派生类的成员函数中,不能访问基类的private成员

  • B. 在派生类的析构函数执行之前,会先调用基类的析构函数

  • C. 派生类对象的地址可以赋值给基类指针

  • D. 派生类可以有和基类同名同参数的成员函数`

正确答案:B

8) 以下哪种使用std::sort算法的方式是不合法的:

  • A. vector<int> a; …; sort(a.begin(), a.end());

  • B. bool b[99]; …; sort(b, b + 99);

  • C. string c = “2333”; …; sort(c.begin(), c.end());

  • D. list<int> d; …; sort(d.begin(), d.end());

正确答案:D

9) 类A重载的运算符声明是int operator<(A &other) const,那么以下说法中正确的是:

  • A. 小于号左侧的A对象不可以是const的

  • B. 小于号右侧的A对象不可以是const的

  • C. 这个写法是错误的,因为小于号的返回类型必须是bool

  • D. 使用小于号的时候,other参数处,传进来的对象实际上会被复制一次

正确答案:B

10) 以下STL中的函数模板哪个可以作用于set

  • A. sort

  • B. random_shuffle

  • C. find

  • D. 都不行

正确答案:C

001:编程填空:二进制输出

描述

给出一个int表示范围内的正整数x,输出其二进制表示。一共要输出31位,不足处要补0。

#include <iostream>
#include <string>
using namespace std;
string dec2bin(int x){
}
int main(){int n;cin >> n;while(n--) {int x;cin >> x;cout << dec2bin(x) << endl;}return 0;
}

输入

第一行是整数n(n<15),表示有n个正整数要处理
第二行是n个正整数

输出

对每个给出的正整数,输出其二进制表示。不足31位则用0补齐到31位

样例输入

3
1 2 3

样例输出

0000000000000000000000000000001
0000000000000000000000000000010
0000000000000000000000000000011

答案:

#include <iostream>
#include <string>
using namespace std;
string dec2bin(int x){string bina = "";while (x != 0) {bina += to_string(x % 2);x /= 2;}while (bina.length() < 31) {bina += to_string(0);}string b = "";b.resize(31);for (int i = 0; i <= 30; i++) {b[i] = bina[30 - i];}return b;
}
int main(){int n;cin >> n;while(n--) {int x;cin >> x;cout << dec2bin(x) << endl;}return 0;
}

002:编程填空:统计动物数量

描述

代码填空,使得程序能够自动统计当前各种动物的数量

#include <iostream>
using namespace std;
void print() {cout << Animal::number << " animals in the zoo, " << Dog::number << " of them are dogs, " << Cat::number << " of them are cats" << endl;
}int main() {print();Dog d1, d2;Cat c1;print();Dog* d3 = new Dog();Animal* c2 = new Cat;Cat* c3 = new Cat;print();delete c3;delete c2;delete d3;print();
}

输入

输出

0 animals in the zoo, 0 of them are dogs, 0 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats
6 animals in the zoo, 3 of them are dogs, 3 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats

样例输入

None

样例输出

0 animals in the zoo, 0 of them are dogs, 0 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats
6 animals in the zoo, 3 of them are dogs, 3 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats

答案:

#include <iostream>
using namespace std;
class Animal {
public:static int number;Animal() {number++;}Animal(Animal &a) {number++;}virtual ~Animal() {number--;}
};
class Dog :public Animal {
public:static int number;Dog() {number++;}Dog(Dog &a) {number++;}~Dog() {number--;}
};
class Cat :public Animal {
public:static int number;Cat() {number++;}Cat(Cat &a) {number++;}~Cat() {number--;}
};
int Animal::number = 0, Dog::number = 0,Cat::number=0;
void print() {cout << Animal::number << " animals in the zoo, " << Dog::number << " of them are dogs, " << Cat::number << " of them are cats" << endl;
}int main() {print();Dog d1, d2;Cat c1;print();Dog* d3 = new Dog();Animal* c2 = new Cat;Cat* c3 = new Cat;print();delete c3;delete c2;delete d3;print();
}

003:编程填空:简单的计算

描述

补充代码,使程序按要求输出

#include <iostream>
using namespace std;
template <class T>
class Add{
public:
};int main(){double f;int n;while( cin >> f >> n) {Add<double> a1(f);Add<int> a2(n);double x,y;int p,q;cin >> x >> y >> p >> q;cout << a1(x, y) << endl;cout << a2(p, q) << endl;}return 0;
}

输入

有若干组数据
每组数据三行
第一行是一个浮点数f和一个整数 n
第二行是两个浮点数 x 和 y
第三行是两个整数 p 和q

输出

对每组数据
先输出 x + y - f
再输出 p + q - n

样例输入

2.2 3
1.0 2.0
10 20
4.5 30
4.8 9.2
100 200

样例输出

0.8
27
9.5
270

答案:

#include <iostream>
using namespace std;
template <class T>
class Add{
public:
float minus;Add(float a) :minus(a) {}float operator ()(T x, T y) {return (float)(x + y) - minus;}
};int main(){double f;int n;while( cin >> f >> n) {Add<double> a1(f);Add<int> a2(n);double x,y;int p,q;cin >> x >> y >> p >> q;cout << a1(x, y) << endl;cout << a2(p, q) << endl;}return 0;
}

004:编程填空:MyClass

补充下列代码,使得程序的输出为:
A:3
A:15
B:5
3
15
5

#include <iostream>
using namespace std;
class CMyClassA {int val;
public:CMyClassA(int);void virtual print();
};
CMyClassA::CMyClassA(int arg) {val = arg;printf("A:%d\n", val);
}
void CMyClassA::print() {printf("%d\n", val);return;
}
int main(int argc, char** argv) {CMyClassA a(3), *ptr;CMyClassB b(5);ptr = &a; ptr->print();a = b;a.print();ptr = &b; ptr->print();return 0;
}

输入

输出

见样例

样例输入

None

样例输出

A:3
A:15
B:5
3
15
5

答案:

#include <iostream>
using namespace std;
class CMyClassA {int val;
public:CMyClassA(int);void virtual print();
};
CMyClassA::CMyClassA(int arg) {val = arg;printf("A:%d\n", val);
}
void CMyClassA::print() {printf("%d\n", val);return;
}
class CMyClassB :public CMyClassA {
public:int val2;CMyClassB(int x) :CMyClassA(3 * x), val2(x) {printf("B:%d\n", val2);}void print() {printf("%d\n", val2);}
};
int main(int argc, char** argv) {CMyClassA a(3), *ptr;CMyClassB b(5);ptr = &a; ptr->print();a = b;a.print();ptr = &b; ptr->print();return 0;
}

005:编程填空:又是MyClass

描述

补充下列代码,使得程序能够按要求输出

#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
int  a[40];
int main(int argc, char** argv) {int t;scanf("%d",&t);while ( t -- ) {int m;scanf("%d",&m);for (int i = 0;i < m; ++i) scanf("%d",a+i);char s[100];scanf("%s",s);CMyClass<int> b(a, m);CMyClass<char> c(s, strlen(s));printf("%d %c\n", b[5], c[7]);}return 0;
}

输入

第一行是整数t表示数据组数 
每组数据有两行 
第一行开头是整数m,然后后面是m个整数(5 < m < 30)
第二行是一个没有空格的字符串,长度不超过50

输出

对每组数据 先输出m个整数中的第5个,然后输出字符串中的第7个字符。
"第i个"中的 i 是从0开始算的。

样例输入

1
6 1 3 5 5095 8 8
helloworld

样例输出

8 r
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
template<class T>
class CMyClass {
public:T *p;CMyClass(T*s, int wid) {p = new T[wid];for (int i = 0; i < wid; i++) {p[i] = *s;s++;}}T operator[](int x) {return *(p + x);}
};
int  a[40];
int main(int argc, char** argv) {int t;scanf("%d",&t);while ( t -- ) {int m;scanf("%d",&m);for (int i = 0;i < m; ++i) scanf("%d",a+i);char s[100];scanf("%s",s);CMyClass<int> b(a, m);CMyClass<char> c(s, strlen(s));printf("%d %c\n", b[5], c[7]);}return 0;
}

006:编程填空:去除重复元素排序

描述

程序填空,使其按要求输出

#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <stack>
#include <iostream>
#include <set>
using namespace std;int main() {int t;int  a[100];cin >> t;while(t--) {for(int i = 0;i < 12; ++i)cin >> a[i];
std::copy(b.begin(), b.end(), c);cout << endl;}return 0;
}
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <stack>
#include <iostream>
#include <set>
using namespace std;int main() {int t;int  a[100];cin >> t;while(t--) {for(int i = 0;i < 12; ++i)cin >> a[i];sort(a,a+12);vector<int> b;b.push_back(a[0]);int tmp=0;for(int i=1;i<12;i++){if(b[tmp] == a[i])continue;else{b.push_back(a[i]);tmp++;}}ostream_iterator<int> c(cout," ");
std::copy(b.begin(), b.end(), c);cout << endl;}return 0;
}

007:编程填空:按要求输出

描述

下列程序的输出为"10 13 18 15 17 12 16 19",  请补充代码

#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <stack>
#include <iostream>
#include <set>
using namespace std;
int  a[10] = {0, 6, 7, 3, 9, 5, 8, 6, 4, 9};
int  b[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int main(int argc, char** argv) {
for(int i=0; i<10; i++) c[a[i]] = b[i];for(it=c.begin(); it!=c.end(); it++) cout<<it->second<<" ";return 0;
}

输入

输出

10 13 18 15 17 12 16 19

样例输入

None

样例输出

10 13 18 15 17 12 16 19
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <stack>
#include <iostream>
#include <set>
using namespace std;
int  a[10] = {0, 6, 7, 3, 9, 5, 8, 6, 4, 9};
int  b[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int main(int argc, char** argv) {map<int, int>c;for(int i=0; i<10; i++)c[a[i]] = b[i];map<int, int>::iterator it;
for(int i=0; i<10; i++) c[a[i]] = b[i];for(it=c.begin(); it!=c.end(); it++) cout<<it->second<<" ";return 0;
}

008:编程填空:还是Fun和Do

描述

填写代码,使输出结果为
A::Fun
B::Do
C::Fun
C::Do
A::Fun
B::Do

#include <iostream>
using namespace std;class A { public: virtual void Fun() { cout << "A::Fun" << endl; }; virtual void Do() { cout << "A::Do" << endl; }
};
{ p.Fun(); p.Do();
} void Call2(B p) {p.Fun();p.Do();
}int main() { C c;B b;Call1(b);Call1(c); Call2(c);return 0;
}

输入

输出

A::Fun
B::Do
C::Fun
C::Do
A::Fun
B::Do

样例输入

None

样例输出

A::Fun
B::Do
C::Fun
C::Do
A::Fun
B::Do
#include <iostream>
using namespace std;class A { public: virtual void Fun() { cout << "A::Fun" << endl; }; virtual void Do() { cout << "A::Do" << endl; }
};
class B:public A {
public:void Do() {cout << "B::Do" << endl;}
};
class C:public B {
public:void Do() {cout << "C::Do" << endl;}void Fun() {cout << "C::Fun" << endl;};
};
void Call1(A &p)
{ p.Fun(); p.Do();
} void Call2(B p) {p.Fun();p.Do();
}int main() { C c;B b;Call1(b);Call1(c); Call2(c);return 0;
}

009:编程填空:简单的对象

描述

程序填空,使得程序输出:
2
1
1
0

#include <iostream>
using namespace std;
class A
{static int num;
public:A(){num+=1;}void func(){cout<< num <<endl;}
};int A::num=1;int main()
{A a1;const A a2 = a1;A & a3 = a1;const A & a4 = a1;a1.func();a2.func();a3.func();a4.func();return 0;
}

输入

输出

2
1
1
0

样例输入

None

样例输出

2
1
1
0
#include <iostream>
using namespace std;
class A
{static int num;
public:A(){num+=1;}void func(){cout<< num <<endl;}void func()const {num--;cout << num << endl;}
};int A::num=1;int main()
{A a1;const A a2 = a1;A & a3 = a1;const A & a4 = a1;a1.func();a2.func();a3.func();a4.func();return 0;
}

010:编程填空:回调函数

描述

输入x1 x2 x3 x4 x5 ,输出y = x5^5 + x4^4 + x3^3 + x2^2 + x1^1 + 1的y的值

#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <map>
#include <set>using namespace std;
class MyFunc
{
};
int main()
{int n;cin >> n;while(n--) {vector<MyFunc> v;for (int i = 0; i < 5; ++i)v.push_back(MyFunc(i+1));int ans = 1;for (int i = 0; i < 5; ++i){int m;cin >> m;ans += v[i](m);}cout << ans <<endl;}
}

输入

多组数据。第一行是数据组数 n
每组数据为一行,5个整数,x1 x2 x3 x4 x5。数值不大,不必考虑溢出

输出

对每组数据,输出一个整数y, y = x5^5 + x4^4 + x3^3 + x2^2 + x1^1 + 1

样例输入

2
2 2 2 2 2
1 1 1 1 1

样例输出

63
6
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <map>
#include <set>using namespace std;
class MyFunc
{
public:int mult;MyFunc(int i):mult(i){}int operator()(int m) {return pow(m, mult);}
};
int main()
{int n;cin >> n;while(n--) {vector<MyFunc> v;for (int i = 0; i < 5; ++i)v.push_back(MyFunc(i+1));int ans = 1;for (int i = 0; i < 5; ++i){int m;cin >> m;ans += v[i](m);}cout << ans <<endl;}
}

011:编程填空:前K大的偶数

描述

输入n个整数,输出整数数列中大小排名前k的偶数

#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <string>
#include <map>
#include <set>using namespace std;
class MyQueue
{
};
int main()
{int t;cin >> t;while(t--) {int n, k;cin >> n >> k;MyQueue q(k);for (int i = 0; i < n; ++i)cin >> q;cout<<q;cout << endl;}return 0;
}

输入

有多组数据
第一行是数据组数 t
对每组数据: 
第一行为整数n (n>=3)和k
接下来的一行为n个整数,保证这些整数中至少有k个偶数。

输出

对每组数据,输出k个整数,降序排列,表示选出来的大小排名前k的偶数

样例输入

2
9 4
1 2 4 3 6 6 7 8 9
3 2
18 16 14

样例输出

8 6 6 4
18 16
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <string>
#include <map>
#include <set>using namespace std;
class MyQueue
{
public:int k;multiset<int, greater<int>> que;MyQueue(int _k):k(_k){}friend istream & operator>>(istream&is, MyQueue &a) {int l;is >> l;if (l % 2 == 0)a.que.insert(l);return is;}friend ostream & operator <<(ostream&os, MyQueue &a) {multiset<int>::iterator p=a.que.begin();int count = 0;for (;count<=a.k-1; p++) {if (count)os << " ";os << *p ;count++;}return os;}
};
int main()
{int t;cin >> t;while(t--) {int n, k;cin >> n >> k;MyQueue q(k);for (int i = 0; i < n; ++i)cin >> q;cout<<q;cout << endl;}return 0;
}

012:编程填空:Printer

描述

完成以下程序,使得输入的整数x,以及若干正整数,将
大于x的正整数输出;然后输入若干字符串,将字符串长度大于x的字符串输出

#include<iostream>
#include<algorithm>
#include<vector>
#include<bitset>using namespace std;class Printer{
int main(){int t;cin >> t;while(t--) {int n,x;cin>>x>>n;vector<int> intVec;for(int i = 0;i < n; ++i) {int y;cin >> y;intVec.push_back(y);}for_each(intVec.begin(), intVec.end(), Printer(x));cout<<endl;vector<string> strVec;for(int i = 0;i < n; ++i) {string str;cin >> str;strVec.push_back(str);}for_each(strVec.begin(), strVec.end(), Printer(x));cout<<endl;}return 0;
}

输入

第一行是整数t,表示一共t组数据
每组数据有三行 
第一行是整数x和整数 n 
第二行是n个整数 
第三行是n个不带空格的字符串

输出

对每组数据
先按原序输出第一行中大于x的正整数(数据保证会有输出) 
再按原序输出第二行中长度大于x的字符串 (数据保证会有输出)

样例输入

2
5 6
1 3 59 30 2 40
this is hello please me ha
1 1
4
this

样例输出

59,30,40,
please,
4,
this,
#include<iostream>
#include<algorithm>
#include<vector>
#include<bitset>using namespace std;class Printer{
public:int x;Printer(int _x):x(_x){}void operator()(int a) {if (a > x)cout << a << ",";}void operator()(string a) {if (a.length() > x)cout << a << ",";}
};
int main(){int t;cin >> t;while(t--) {int n,x;cin>>x>>n;vector<int> intVec;for(int i = 0;i < n; ++i) {int y;cin >> y;intVec.push_back(y);}for_each(intVec.begin(), intVec.end(), Printer(x));cout<<endl;vector<string> strVec;for(int i = 0;i < n; ++i) {string str;cin >> str;strVec.push_back(str);}for_each(strVec.begin(), strVec.end(), Printer(x));cout<<endl;}return 0;
}

013:编程填空:三生三世

描述

近年来,国内电视剧吸引了越来越多的关注;有的以当红的演员阵容而吸引观众,比如《三生三世十里桃花》(Life After Life,Blooms Over Blooms);有的以贴近时代的剧情而备受关注,比如《人民的名义》(In the Name of People);有的则以精湛的演技赢得观众的喜欢,比如《大明王朝:1566》(Ming Dynasty: 1566)。
你的任务是根据电视剧的不同属性(演员、剧情和演技)对电视剧进行排行。

#include<iostream>
#include<cstring>
#include<list>
#include<algorithm>
using namespace std;class TV_Drama{public:char name[100];int actor;int story;int acting_skill;
int main(){list<TV_Drama> lst;int n;cin>>n;char  _name[100];int _actor, _story, _acting_skill;for (int i=0; i<n; i++){cin.ignore();cin.getline(_name,100);cin>>_actor>>_story>>_acting_skill;lst.push_back(TV_Drama(_name, _actor, _story, _acting_skill));}lst.sort();for_each(lst.begin(), lst.end(), Printer);  cout<<endl;lst.sort(comparator_1);for_each(lst.begin(), lst.end(), Printer);  cout<<endl;lst.sort(comparator_2());for_each(lst.begin(), lst.end(), Printer);    cout<<endl;return 0;
}

输入

首先输入整数n,代表电视剧的个数。接下来,对于每个电视剧有两行输入:第一行一个字符串(可能含有空格,逗号,冒号等标点符号)作为电视剧的名字;第二行包括三个整数,分别为演员阵容、剧情和演技的评分。

输出

输出包括三行,分别为电视剧按演员阵容、剧情和演技的排行榜(评分由高到低),电视剧名字之间以分号隔开

样例输入

3
In the Name of People
98 97 99
Life After Life, Blooms Over Blooms
99 82 73
Ming Dynasty: 1566
97 100 100

样例输出

Life After Life, Blooms Over Blooms;In the Name of People;Ming Dynasty: 1566;
Ming Dynasty: 1566;In the Name of People;Life After Life, Blooms Over Blooms;
Ming Dynasty: 1566;In the Name of People;Life After Life, Blooms Over Blooms;
#include<iostream>
#include<cstring>
#include<list>
#include<algorithm>
using namespace std;class TV_Drama{public:char name[100];int actor;int story;int acting_skill;TV_Drama(char *_name, int _actor, int _story, int _ac) :actor(_actor), story(_story), acting_skill(_ac) {int len = 0;for (int i = 0; _name[i] != '\0'; i++) {name[i] = _name[i];len++;}name[len] = '\0';}bool operator<(TV_Drama&l) {return actor > l.actor;}
};
void Printer(TV_Drama x) {cout << x.name << ";";
}
bool comparator_1(TV_Drama &x1,TV_Drama &x2) {return x1.story > x2.story;
}
class comparator_2{
public:comparator_2() {}bool operator() (TV_Drama &x1, TV_Drama &x2) {return x1.acting_skill > x2.acting_skill;}
};
int main(){list<TV_Drama> lst;int n;cin>>n;char  _name[100];int _actor, _story, _acting_skill;for (int i=0; i<n; i++){cin.ignore();cin.getline(_name,100);cin>>_actor>>_story>>_acting_skill;lst.push_back(TV_Drama(_name, _actor, _story, _acting_skill));}lst.sort();for_each(lst.begin(), lst.end(), Printer);   cout<<endl;lst.sort(comparator_1);for_each(lst.begin(), lst.end(), Printer);  cout<<endl;lst.sort(comparator_2());for_each(lst.begin(), lst.end(), Printer);    cout<<endl;return 0;
}

014:编程填空:矩形排序

描述

给定一系列边长已知的矩形,输出对矩形进行两种排序的结果。

在第一种排序中,先按矩形的面积从大到小排序;若两个矩形的面积相同,则周长大的排在前。

在第二种排序中,先按矩形的周长从小到大排序;若两个矩形的周长相同,则面积小的排在前。

<span style="color:#231f17">#include <iostream>
#include <set>
using namespace std;</span>
<span style="color:#231f17">int main() {multiset<Rectangle> m1;multiset<Rectangle, Comp> m2;int n, a, b;cin >> n;for (int i = 0; i < n; i++) {cin >> a >> b;m1.insert(Rectangle(a, b));m2.insert(Rectangle(a, b));}for (multiset<Rectangle>::iterator it = m1.begin(); it != m1.end(); it++) {cout << *it << endl;}cout << endl;for (multiset<Rectangle>::iterator it = m2.begin(); it != m2.end(); it++) {cout << *it << endl;}return 0;
}</span>

输入

第一行是一个整数n,表示输入的矩形个数。
接下来n行表示了n个矩形。每行有两个整数a与b,表示该矩形的长与宽。

输出

先用n行输出第一种排序的结果。每行两个整数,依次表示该矩形的面积与周长。
再输出一个空行。
最后用n行输出第二种排序的结果。每行两个整数,依次表示该矩形的面积与周长。

样例输入

6
3 8
4 6
10 2
6 6
4 8
3 6

样例输出

36 24
32 24
24 22
24 20
20 24
18 1818 18
24 20
24 22
20 24
32 24
36 24
#include <iostream>
#include <set>
using namespace std;
class Rectangle
{
public:int a,b,area,premiere;Rectangle(int c,int d){a = c;b = d;area = a*b;premiere = (a+b)*2;}friend bool operator < (const Rectangle& a1, const Rectangle& a2){if(a1.area>a2.area)return true;else if(a1.area == a2.area){if(a1.premiere>a2.premiere)return true;elsereturn false;}elsereturn false;}friend class Comp;friend ostream & operator<<(ostream &o, const Rectangle& a1){o << a1.area << " "<<a1.premiere;return o;}
};
struct Comp{bool operator()(const Rectangle& a1, const Rectangle& a2){if(a1.premiere<a2.premiere)return true;else if(a1.premiere == a2.premiere){if(a1.area < a2.area)return true;elsereturn false;}elsereturn false;}
};
int main() {multiset<Rectangle> m1;multiset<Rectangle, Comp> m2;int n, a, b;cin >> n;for (int i = 0; i < n; i++) {cin >> a >> b;m1.insert(Rectangle(a, b));m2.insert(Rectangle(a, b));}for (multiset<Rectangle>::iterator it = m1.begin(); it != m1.end(); it++) {cout << *it << endl;}cout << endl;for (multiset<Rectangle>::iterator it = m2.begin(); it != m2.end(); it++) {cout << *it << endl;}return 0;
}

北京大学MOOC 程序设计与算法(三)C++面向对象程序设计 期末考试相关推荐

  1. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足     结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...

  2. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第三章:类和对象进阶(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter 3:类和对象进阶 $3.1构造函数 $3.1.1 构造函数的概念和作用     全局变量在程序装入内存时就已经分配好了存储空间,程序 ...

  3. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. 第五章 继承与派生 $5.1 继承与派生的概念 $5.1.1 基本概念     在C++中,当定义一个新的类B时,如果发现类B拥有某个已经写好的类A ...

  4. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记chapter1第一章(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. $1.4强制类型转化运算符的新形式:     类型名(待转化的表达式),如double(a),int(3.5) $1.5函数参数的默认值     在 ...

  5. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  6. 三年级计算机上册期末测试题,小学三年级英语上册期末考试练习题

    小学三年级英语上册期末考试练习题 听力部分(20分) 一.听录音,选出你所听到的内容(听两遍).(10分) ( ) 1 A. J B. G C. B ( ) 2 A. u B. v C. w ( ) ...

  7. 【实验三/四 面向对象程序设计/语言基础与面向对象】

    目录 一.实验目的和要求 二.实验内容 1.求最大公约数 2.复数 5.编写一个含有5个类的程序 三.参考 四.其他实验内容 [实验三 面向对象程序设计] 3.编写一个含圆类的程序 4.含圆类.圆柱类 ...

  8. java面向对象程序设计 论文_基于JAVA面向对象程序设计

    内容介绍 原文档由会员 xiaowei 发布 基于JAVA面向对象程序设计 ------------科学养兔项目分析 2.3万字 31页 摘要 本文报道了对面向对象程序设计思想的基本阐述,就科学养兔项 ...

  9. 【算法设计与分析】期末考试知识总结(知识超浓缩版)

    目录 简要介绍 ·复杂度 ·迭代 插入排序 二分查找 快排划分 选择排序 计数排序 基数排序 桶排序 ·递归 递归式的计算-四种方法 欧几里得算法 汉诺塔问题 快速排序 归并排序 堆排序 ·分治 二维 ...

  10. python考试名词解释_程序设计(python)_章节测验,期末考试,慕课答案查询公众号...

    程序设计(python)_章节测验,期末考试,慕课答案查询公众号 更多相关问题 [名词解释] 语丝社 [问答题,简答题] 简析<雷雨>中侍萍形象 [名词解释] "人的文学&quo ...

最新文章

  1. 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐
  2. 获取当前元素在兄弟元素节点中的索引
  3. 【剑指offer-Java版】24二叉搜索树后序遍历序列
  4. 学习Java开发难不难?好学吗?
  5. python输入年份月份输出天数_6.2(输入年份 月份 输出该月天数)
  6. 【10.29周一电商,已好】中国日历的至高境界,377张震撼级插画,美到爆!
  7. 为什么使用NativeJdbcExtractor
  8. html恢复安卓版,recovery恢复模式 进入Recovery模式前
  9. java算法在工作,我在北京找工作(三):java实现算法2 直接插入排序+不可变类...
  10. idea 中新建Servlet
  11. c#使用XSLT将xml文档转换为html文档
  12. PDF怎样免费转换成word?无须借助软件,网页就能轻松实现。
  13. python3调用cpp的方法——python调用so
  14. python水印_使用Python PIL 给图片添加水印
  15. 门窗计算机公式,窗户的计算公式是什么
  16. 宇枫资本投资理财这些要注意
  17. 201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结
  18. android数据库降级_Android之sqlite数据库版本升级和降级的处理(onUpgrade和onDowngrade)...
  19. 华为云,站在数字化背后
  20. Linux文件查找和文件内容关键字查找

热门文章

  1. d3.js环形统计图代码
  2. Type -C 耳机
  3. android9使用type-c接口,插入线控耳机与数据线监听混乱
  4. Qt调用7z实现压缩和解压缩
  5. 详解Windows PE(Windows预安装环境)
  6. python函数库分类及实例_Python中Scikit-Learn库的分类方法总览
  7. sqlite3, IntegrityError: UNIQUE constraint failed when inserting a value
  8. (小程序) 客户签名及签名后页面整体转图片后上传
  9. Git 学习进展 (补发)
  10. 在我的电脑里计算机管理在哪里,电脑控制面板在哪里查找步骤 一起了解下吧...