#include<bits/stdc++.h>
using namespace std;
class rectangle{
private:
int length,width;
public:
rectangle(int x,int y){
length=x;
width=y;
}
void set(int x,int y){
length=x;
width=y;
}
int area(){
return length*width;
}
};
class cuboid:public rectangle{
private:
int height;
public:
// write your code here...
cuboid(int x,int y, int m_height):rectangle(x,y),height(m_height){}
int getvolume(){
int res = rectangle::area() * height;
return res;
}
};
int main(){
int x,y,z;
cin>>x>>y>>z;
cuboid a(x,y,z);
cout<<a.getvolume();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
class rectangle{
private:
int length,width;
public:
rectangle(int x,int y){
length=x;
width=y;
}
void set(int x,int y){
length=x;
width=y;
}
int getlength(){
return length;
}
int getwidth(){
return width;
}
int area(){
return length*width;
}
};
class cuboid:public rectangle{
private:
int height;
public:
// write your code here...
cuboid(int x,int y,int m_heigth):rectangle(x, y),height(m_heigth){
}
int area(){
int res = rectangle::area() * 2 + 2 * height *(getlength() + getwidth());
return res;
}
};
int main(){
int x,y,z;
cin>>x>>y>>z;
cuboid a(x,y,z);
cout<<a.rectangle::area()<<'\n'<<a.area();
return 0;
}
注意这里的area前需要加rectangle因为重名了,而getlength() + getwidth()不需要。
#include<bits/stdc++.h>
using namespace std;
class rectangle{
private:
int length,width;
public:
rectangle(int x,int y){
length=x;
width=y;
}
void set(int x,int y){
length=x;
width=y;
}
int getlength(){
return length;
}
int getwidth(){
return width;
}
// write your code here...
virtual int getval(){
return length * width;
}
};
class cuboid:public rectangle{
private:
int height;
public:
cuboid(int x,int y,int z):rectangle(x,y){
height=z;
}
// write your code here...
virtual int getval(){
return getlength() * getwidth() * height;
}
};
int main(){
int x,y,z;
cin>>x>>y>>z;
cuboid a(x,y,z);
rectangle b(x,y);
rectangle *p=&b;
cout<<p->getval()<<'\n';
p=&a;
cout<<p->getval();
return 0;
}
实现最简单的多态,实现多态时基类和子类中的同名成员函数要以virtual开头
#include<bits/stdc++.h>
using namespace std;
int main(){
set<int>s;
// write your code here......
int a,b,c,d,e;
while (cin>>a>>b>>c>>d>>e) {
s.insert(a);
s.insert(b);
s.insert(c);
s.insert(d);
s.insert(e);
}
for( set<int>::iterator it = s.cbegin();it != s.cend() ; it ++){
cout << * it <<" ";
}
return 0;
}
STL set 函数,这道题开始涉及到迭代器以及标准库了,迭代器的语法也是容易忘的;
#include<bits/stdc++.h>
#include <vector>
using namespace std;
int main(){
int n,k;
vector<int>a;
// write your code here......
cin>>n>>k;
for( int i =0; i != n ; ++i){
int temp=0;
cin>>temp;
a.push_back(temp);
}
for(auto it =a.end()-1 ; k>0; it--,k--){
cout<<*it <<" ";
}
return 0;
}
这个题我做了半天咋弄咋不对,最后发现是没有写输入n和k的代码,我真是无语了;
正经地说这个题是考察vector的插入,迭代器等,以及auto的运用等(不用也行;
#include<bits/stdc++.h>
using namespace std;
int main(){
set<int>s;
//write your code here......
int n ,m;
cin>>n>>m;
for(int i =0; i!=n;++i){
int temp;
cin>>temp;
s.insert(temp);
}
for(int i=0;i!=m;++i){
int temp;
cin>>temp;
auto it =s.upper_bound(temp);
if(it != s.end()){
cout<<*it<<endl;
}else{
cout<<"-1"<<endl;
}
}
return 0;
}
这个 题如果一般人应该想不到upper_bound()这个函数,我也是去搜了以下set的详解才知道这个函数。知道了这个函数及功能做这个题就没有难度了,不然的话要做还挺复杂的,用插入,排序,再删除应该也能做。
#include<bits/stdc++.h>
#include <string>
using namespace std;
int main(){
//write your code here......
int n , m;
cin>>n>>m;
map<int, int> mymap;
for(int i=0 ;i!=n;++i){
int temp;
cin>>temp;
mymap[temp]=1;
}
for(int i=0;i!=m;++i){
int temp;
cin>>temp;
if(mymap[temp]){
cout<<"yes"<<endl;
}else {
cout<<"no"<<endl;
}
}
return 0;
}
STL map,map是以键值对的方式存储的,对map的检索往往是已知 键的值 去求 值的值
这个题的思路有些取巧,即将所要检索的值的作为map的键或者说对应的下标,然后将值置为1,如果检索时不为1,则no,否则yes
#include<bits/stdc++.h>
#include <queue>
using namespace std;
int findKthLargest(vector<int> a,int k){
priority_queue<int> myqueue;
for(int i=0;i<a.size();++i){
if (myqueue.size()<k) {
myqueue.push(a[i]);
}else if (myqueue.top()>a[i]) {
myqueue.pop();
myqueue.push(a[i]);
}
}
return myqueue.top();
}
int main(){
int n,k;
vector<int>a;
// write your code here......
cin>>n>>k;
while (n--) {
int temp;
cin>>temp;
a.push_back(temp);
}
cout<<findKthLargest(a, k)<<endl;
return 0;
}
这个题已经脱离语法的范畴,到了算法的领域了;如果面试的时候用排序然后找第k大,HR就让你回家了;(哈哈开个玩笑
正经做法:大堆根,具体方法不阐述,网上一搜一大堆。
OK,今天就刷到这里,这是Part5,每一个part我都是拿一天的某一段时间来写的,也就是说这是第5天写。我看了下题库,只剩4个实战题了,下一part本系列就完结。后面就去刷leetcode或者可能做一些C++的玩具小项目的题了。