【C++】刷题日记(day3)

简介: 刷题是我们学习编程的一个重要模块,刷题能帮助我们巩固我们学习的知识,能够增强我们的编程水平.本文总共讲了5题有关多态的选择题,以及两道牛客编程题,希望大家读后能够有所收获!

53795b4d726dec27b04ad864344b1c4.jpg

越努力,越幸运;越懒惰,越迷茫!

一、选择题

1、下面叙述不正确的是(D)

A派生类一般都用公有派生

B对基类成员的访问必须是无二义性的

C赋值兼容规则也适用于多重继承的组合

D父类的公有成员在派生类中仍然是公有的

答案:选D。分析:子类通过公有继承,父类的公有成员在派生类中仍然是公有的,但是如果是私有继承,父类的公有成员在派生类中算私有的。

2、以下关于纯虚函数的说法,正确的是()

A、子类必须实现基类的

B、声明纯虚函数的类不能实例化

C、声明纯虚函数的类成虚基类

D、纯虚函数必须是空函数

答案: B。分析:B答案:抽象类不能声明对象,只是作为基类为派生类服务。

3、下列关于多态性说法不正确的是()

A、重载方式包含函数重载和运算符重载

B、多态性是指同名函数对应多种不同的实现

C、重载方式仅有函数重载

D、多态性表现为静态和动态两种方式

答案 C。分析:重载方式不仅有函数重载,运算符重载,但是运算符重载严格也是算函数重载。

4、下列哪种函数可以定义为虚函数()

A、析构函数

B、内联成员函数

C、静态成员函数

D、构造函数

答案: A。 分析:析构函数是可以被定义为虚函数。

5、现有一循环队列,其队头指针为front,队尾指针为rear,循环队列长度

为N,最多存储N-1个数据。其队内有效长度为()

A.(rear-front + N)% N+1

B.(rear-front +N)% N

C.(rear-front)%(N+1)

D.(rear-front+N)%(N-1)

答案: B。分析:有效长度一般是rear-front,但是循环队列中rear有可能小于front,所以需要+N,最大长度为N,所以有效长度不可能超过N,故需要%N。

二、编程题

1、参数解析

image.png

image.png

题目分析:首先是这题读入有空格,需要用getline解析出来的每一个参数用vector<string>存。

代码分析:

#include <iostream>#include <string>#include <vector>usingnamespacestd;
intmain() {
stringstr;
while (getline(cin, str)) {
boolflag=false;
vector<string>vec;
stringrow;
for (inti=0; i<str.size(); i++) {
if (flag) {//在括号内if (str[i] !='\"') row+=str[i];
elseflag=false;
            } else {
if (str[i] ==' ') {
vec.push_back(row);
row="";
                } elseif (str[i] =='\"') flag=true;
elserow+=str[i];
            }
        }
vec.push_back(row);
cout<<vec.size() <<endl;
for (autoi : vec) cout<<i<<endl;
    }
return0;
}


2、跳石板

image.png

image.png

贪心解法

#include <iostream>#include <vector>#include <climits>#include <cmath>#include <algorithm>usingnamespacestd;
intmain(){
intN,M;
while(cin>>N>>M){
vector<int>steps(M+1,INT_MAX);
steps[N] =0;
for(inti=N;i<=M;i++){
if(steps[i] ==INT_MAX){
continue;
            }
for(intj=2;(j*j)<=i;j++){
if(i%j==0){
if(i+j<=M){
steps[i+j] =min(steps[i]+1,steps[i+j]);
                    }
if(i+(i/j) <=M){
steps[i+(i/j)] =min(steps[i]+1,steps[i+(i/j)]);
                    }
                }
            }
        }
if(steps[M] ==INT_MAX){
steps[M] =-1;
        }
cout<<steps[M]<<endl;
    }
return0;
}

动态规划解法:

#include<bits/stdc++.h>usingnamespacestd;
constintN=1e5+10;
vector<int>v[N];
intf[N];
intn,m;
intmain()
{
cin>>n>>m;
memset(f,0x3f,sizeoff);
for(inti=n;i<=m;i++)
for(intj=2;j<=i/j;j++)
if(i%j==0)
            {
v[i].push_back(j);
if(i/j!=i) v[i].push_back(i/j);
            }
f[n]=0;
for(inti=n;i<=m;i++)
for(autox:v[i])
if(i+x<=m) f[i+x]=min(f[i+x],f[i]+1);
if(f[m]!=0x3f3f3f3f) cout<<f[m];
elsecout<<-1;
return0;
}


总结

本文总共讲了5题有关多态的选择题,以及两道牛客编程题,希望大家读后能够有所收获!




相关文章
|
算法 C语言 C++
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
284 0
|
存储 C++
【五一创作】C++刷题 【入门4】数组
【五一创作】C++刷题 【入门4】数组
142 0
|
机器学习/深度学习 存储 人工智能
【c++百日刷题计划】 ———— DAY12,奋战百天,带你熟练掌握基本算法
【c++百日刷题计划】 ———— DAY12,奋战百天,带你熟练掌握基本算法
218 0
|
7月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
7月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
8月前
|
C语言 C++
【C语言/C++】牛客网刷题训练-12
【C语言/C++】牛客网刷题训练-12
|
8月前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
92 1
|
存储 C语言 C++
【C/C++刷题——leetcode】查找字符串中最大的子串
【C/C++刷题——leetcode】查找字符串中最大的子串
355 0
|
机器学习/深度学习 人工智能 C++
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
193 0
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
|
存储 算法 C++
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
370 0