您的位置:首页 > 编程语言 > C语言/C++

牛客20170323模拟笔试C++方向

2017-03-29 23:29 295 查看
选择题部分:

1 C++中下面程序输出的结果为:()

#include <iostream>
using namespace std;
int main(){
float a=b=12.5;
cout<<a<<endl<<b;
return 0;
}


A 12.5 12.5

B 12.5 0.0

C 0.0 12.5

D 编译错误

代码第五行报错 [Error]’b’ was not declared in this scope

选D

2 一个算法的时间复杂度为(n^3+n^2log2n+5n)/n^2,按照O()记法,其数量级表示为()

A O(n^3)

B O(n)

C O(nlongn)

D O(n^2logn)

n^3/n^2=n

选B

3 A市B,C两个区,人口比例为3:5,据历史统计B区的犯罪率为0.01%,C区为0.015%,现有一起新案件发生在A市,那么案件发生在B区的可能性有多大?()

A 37.5%

B 32.5%

C 28.6%

D 76.9%

3*0.01%/(3*0.01%+5*0.015%)≈28.6%

这个是条件概率吧,忘了

4 下述有关虚函数和纯虚函数说法错误的是()

A 被virtual关键字修饰的成员函数,就是虚函数

B 在基类中实现纯虚函数的方法是在函数原型后加“=0” virtual void funtion1() = 0

C 同时含有纯虚函数的类称为抽象类,它可以被实例化,但是对象不可以调用纯虚函数

D 使用纯虚函数的意义是在很多情况下,基类本身生成对象是不全情理的

参考:http://blog.csdn.net/xwpc702/article/details/8670025选C 抽象类是不能被实例化的,因为有纯虚函数没有定义

5 下面不属于TCP协议拥塞控制部分的是()

A 快速重传

B 慢启动

C 带外数据

D 快速恢复

参考:http://blog.csdn.net/sicofield/article/details/9708383

选C 计算机网络知识

6 牛客网为激励员工努力工作,决定根据每月的工作绩效评选“牛客之星”,王某在前10个月恰好只有连续的4个月中当选“牛客之星”,他的另三位同事杨某,肖某,华某也做到了这一点。关于这四人当选“月度之星”(“牛客之星”??)的月份,已知:(1)王某和杨某仅有三个月同时当选;(2)杨某和肖某仅有三个月同时当选;(3)王某和华某不曾在同一个月当选;(4)仅有2人在7月同时当选;(5)至少有1人在1月当选。根据以上信息,有3人同时当选“牛客之星”的月份是()

A 1-3月

B 2-4月

C 3-5月

D 4-6月

E 5-7月

1234 华

3456 肖

4567 杨

5678 王

选D

7 设G(V,E)为一个无向图,顶点集大小为P,边集大小为Q,则G图中所有顶点度之和为()

A P

B Q

C 2Q

D 2(P+Q)

选C 2*Q

8 下面哪种数据结构不能用来描述栈?()

A FIFO list

B LIFO list

C Piles

D Push-down lists

A 随便选的。问的不是实现,是描述,那就选对立面吧。

9 下面有关C++线程安全,说法错误的是?()

A 线程安全问题都是由全局变量及静态变量引起的

B 若每个线程中对全局变量、静态变量只有只读操作,而无写操作,一般来说这个,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般需要考虑线程同步,否则的话就可能影响线程安全

C C++标准库里面的string保证是线程安全的

D POSIX线程标准要求C标准库中的大多数函数具备线程安全性

选C

http://blog.csdn.net/chengonghao/article/details/51943731

10 以下不属于NoSQL数据库的是?()

A Redis

B Mongodb

C Cassandra

D PostgreSQL

常用有这些Cassandra、Mongodb、CouchDB、Redis、 Riak、Membase、Neo4j HBase

选D 参考:http://blog.jobbole.com/1344/

11 查询该目录及子目录下所有的以.conf为后缀的文件

A find ./ -name “conf”

B find ./ -name “*.[conf]”

C find ./ -type f | egrep “.(conf)”

D find ./ -regextype posix-extended -regex “.*.(conf)”

太久没接触 感觉“*.conf”就可以

选B 灵性选

/*

* A 查询该目录及子目录下所有名为”conf”的文件

* B 查询该目录及子目录下以xx.c xx.o xx.n xx.f的文件

* C 查询该目录及子目录下 包含conf的文件 如xx/config/xx也可以

* D 要用.* 开头 因为*置于正则表达式的第一个字符,不具任何特殊意义

* regextype 的type类型包括posix-awk, posix-basic, posix-egrep

* 和 posix-extended四种,不加的话,默认的是默认的正则表达式类

* 型是emacs。

* 参考:

* find中使用正则表达式

* http://blog.csdn.net/lee244868149/article/details/43406335

*

* POSIX正则表达式

* http://www.cnblogs.com/muxiaoye/p/308ecdfb23c98b2a177e8e6eab7293a9.html

*/

12 假定把磁盘上的一个数据块中的信息输入到一个双缓冲区的时间为T=0.1ms,将缓冲区中的数据送到用户区的时间M=0.05ms,而CPU对数据的处理时间C=0.05ms,这样系统对每个数据块的处理时间为()

A 0.05ms

B 0.1ms

C 0.15ms

D 0.25ms

操作系统知识(为什么感觉是计算机组成原理讲的)

原题https://www.nowcoder.com/questionTerminal/b92966024ee9410e959f883dd6e89b25

http://www.examw.com/os/xp/180575/

选B 流水式作业考虑最大的值,所以选B吗?

13牛客网为了扩大业务规模,招了很多人,因此重新租用一间新的办公大楼,牛客的工程师们用电脑制作出了办公大楼的模型,正在规划如何布局新的工作环境,他们打算在娱乐区用大小相等的圆形材料分割出一些空间,如果使用3种不同圆形材料最多可以将空间分为八个区域(包括圆形以外的区域),如果给你七个圆形材料,你最多可以帮助工程师们分出多少个空间?()

用两个圆可以把平面空间分成4份,三个圆可以分成8份,现在有七个圆,最多可以把平面空间分成几份()(大概意思是这样)

A 128

B 100

C 64

D 44

作业帮是个好东西

https://www.zybang.com/question/836443b3973ed7238ca04d86b3861be1.html

选D 公式n^2-n+2

14 下面关于哈夫曼树的说法中,错误的是()

A 哈夫曼树是一棵完全二叉树

B 哈夫曼树中没有度为1的结点

C 哈夫曼树具有最上的带权路径长度

D 同一组权值构造的哈夫曼树不唯一

选A 哈夫曼树不一定是完全二叉树

15 下面程序的功能是输出数组的全排列,选择正确的选项,完成其功能()

void perm(int list[], int k, int m)
{
if(    )
{
copy(list,list+m,ostream_iterator<int>(cout," "));
cout<<endl;
return;
}
for (int i=k; i<=m; i++)
{
swap(&list[k],&list[i]);
(    );
swap(&list[k],&list[i]);
}
}


A k!=m 和 perm(list,k+1,m)

B k==m 和 perm(list,k+1,m)

C k!=m 和 perm(list,k,m)

D k==m 和 perm(list,k,m)

原题:

https://www.nowcoder.com/questionTerminal/af099970cfcc44cfa8e43348f600a017?pos=16&orderByHotValue=1

选B 第一个if是判断是不是要打印全排列了,第二个是交换k,i后递归的下一步

16 下列关于线程和进程的描述错误的是?()

A 一个进程至少有一个线程来运行

B 进程合适在SMP机器上进行,而线程则可以跨机器迁移

C 线程必须存在进程里面

D 即使程序员不创造任何线程,操作系统将创建主线程为每一个应用程序或进程

参考 http://blog.csdn.net/u014744118/article/details/52826572

选B 正确的是:线程合适在SMP机器上进行,而进程则可以跨机器迁移。我当时看反了。。

感谢牛客网 Jccccc丶灬同学指出这个(我原来选的是D)

17 一个顺序存储的长度为n的线性表,在第i个位置前面插入一个元素,总共需要移动的元素个数为()。

A n-i

B n-i+1

C i

D n-i-1

作业帮现在也面向大学生了吗?

https://www.zybang.com/question/b49c2fe0d9191516373ac501b61f9e89.html

选B 读题的时候,其实我很想说有没有第0个位置(插播笑话)

18 每10分钟运行一次crond任务exam,下面哪项正确?()

A /10 * * * exam  

B 10/* * * * * exam

C * * /10 * exam

D * /10 * * exam

参考 https://www.nowcoder.com/questionTerminal/b3d3dafd6a55486880c6a339ff6547c0

http://blog.csdn.net/lzuacm/article/details/52443341

选A

19 某系统中有9台打印机,三个进程P1,P2,P3需要打印机的数量分别为7台、6台和4台。若P1、P2、P3已申请到4台、1台和2台且每个进程必须申请到需要数量的打印机才能执行结束,然后释放资源。下列说法正确的是()

A 存在不止一个安全序列,所以系统处于安全状态

B 因为不存在安全序列,所以系统处于不安全状态

C 存在安全序列P3、P1、P2,所以系统 处于安全状态

D 存在安全序列P3、P2、P1,所以系统 处于安全状态

选C 没什么好解释的

20 对算法估计空间复杂度,关注的是()

A 程序代码占用的空间

B 程序使用的辅助空间

C 程序运行占用的空间

D 程序使用的数据空间

参考 http://sanwen.net/a/fjmufpo.html

看了下这个公众号 已经70+我没读了 懒惰的我

选B ACD都不对

以上的答案都是自己琢磨的,不保证一定对。

编程题部分:

代码均复制自此帖 https://www.nowcoder.com/discuss/22561?type=0&order=0&pos=6&page=1

1



输入例子:

1221

1234

输出例子:

YES

NO

代码:

/*
作者:NotDeep
链接:https://www.nowcoder.com/discuss/22561?type=0&order=0&pos=6&page=1
来源:牛客网
*/

#include <bits/stdc++.h>

using namespace std;

string solve(int number) {
ostringstream oss;
oss << number;
string s = oss.str();
int n = s.length();
long long n1, n2;
for(int i = 1; i < n; i++) {
n1 = n2 = 1;
for(int j = 0; j < i; j++)
n1 *= s[j] - '0';
for(int j = i; j < n; j++)
n2 *= s[j] - '0';
if(n1 == n2)
return "YES";
}
return "NO";
}
int main() {
int x;
cin >> x;
cout << solve(x) << endl;
return 0;
}


2







代码:

/*
作者:NotDeep
链接:https://www.nowcoder.com/discuss/22561?type=0&order=0&pos=6&page=1
来源:牛客网
*/

#include <bits/stdc++.h>

using namespace std;

vector<string> v;
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
string x;
cin >> x;
sort(x.begin(), x.end());
v.push_back(x);
}
sort(v.begin(), v.end());
int ans = 0;
string tmp("");
for(int i = 0; i < v.size(); i++) {
if(tmp != v[i]) tmp = v[i], ans++;
}
cout << ans << endl;
}


把输入的字符串排序,再把这n个字符串再排序,然后找有多少个不同的

3





代码

/*
作者:NotDeep
链接:https://www.nowcoder.com/discuss/22561?type=0&order=0&pos=6&page=1
来源:牛客网
*/

#include <bits/stdc++.h>

using namespace std;

const int maxn = 500;

vector <string> *l;

int m, n, x;
int solve(int i, int numZeroes, int numOnes) {
vector<string> &list = *l;
if(i == list.size()-1) {
for(int x = 0; x < list[i].size(); ++x) {
if(list[i][x] == '1') --numOnes;
if(list[i][x] == '0') --numZeroes;
}
if((numOnes | numZeroes) >= 0) return 1;
else return 0;
}
int a = solve(i+1, numZeroes, numOnes);
for(int x = 0; x < list[i].size(); ++x) {
if(list[i][x] == '1') --numOnes;
if(list[i][x] == '0') --numZeroes;
}
if((numOnes | numZeroes) < 0) return a;
int b = 1 + solve(i+1, numZeroes, numOnes);
return max(a, b);
}
int main() {
vector<string> v;
cin >> x >> n >> m;
for(int i = 0; i < x; i++) {
string tmp; cin >> tmp;
v.push_back(tmp);
}
l = &v;
cout << solve(0, n, m) << endl;
return 0;
}


这个感觉是类似0-1背包的问题,但是看了参考答案用的是动态规划的方法。

感谢牛客网!!

https://www.nowcoder.com/132183
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言