爱奇艺秋季校招C++工程师(第三场)-2018年

一、单项选择题

1、请选择下列程序的执行结果( )

#include<iostream>
using namespace std;
class A{    
    public:   
    void f(){
        cout<<"A::f()";
    }
};
class B: public A{    
    public:        
        void f(){
            cout<<"B::f()";
            };
};
void main(){  
    B b;
    b.f();  
}

A、A::f();B::f() 都不可能

B、A::f();B::f() 都有可能

C、A::f()

D、B::f()

2、什么命令不可以查看mysql数据库中user表的表结构( )

A、show create table user

B、describe user

C、desc user

D、show columns for user

3、以下表达式错误的是( )

A、<div>bool flag ;<br>if(flag)</div>

B、<div>int flag;<br>if(flag != 0)</div>

C、<div>double flag;<br>if(flag == 0)</div>

D、<div>int *point;<br>if(point == null)</div>

4、以下函数调用错误的是( )

void func(int iArg = 0, char cArg = 'a', string sArg = "hello", int *ipArg = NULL);

A、func(1);

B、func(1,'h',&quot;hehe&quot;,NULL);

C、func(1,'n',&quot;hehe&quot;);

D、func(1,&quot;nihao&quot;);

5、某文件系统采用链接存储方式,文件A在磁盘中存放的情况如图所示

若该文件所在的目录文件已经在内存中,要读取文件块2,需要访问磁盘的次数为( )

A、1次

B、2次

C、3次

D、4次

6、以下哪种排序算法在最坏情况下的时间复杂度最小( )

A、冒泡排序

B、选择排序

C、归并排序

D、插入排序

7、两台主机A和B已建立了TCP连接,A始终以MSS=1KB大小的段发送数据,并一直有数据发送;B每收到一个数据段都会发出一个接收窗口为9KB的确认段。

若A在T时刻发生超时时拥塞窗口为8KB,则从T时刻起,不再发生超时的情况下,经过10个RTT后,A的发送窗口是 ( )

A、8KB

B、9KB

C、10KB

D、11KB

8、设栈S初始状态为空。元素1,2,3,4,5,6依次通过栈S,若出栈的顺序为4,6,5,3,2,1,则栈S的容量至少应该为( )

A、3

B、4

C、5

D、6

9、在Linux系统中,因为某些原因造成了一些进程变成孤儿进程,那么这些孤儿进程会被以下哪一个系统进程接管( )

A、sshd

B、init

C、top

D、syslogd

10、在Linux系统下,下列哪个命令可以查看曾经登录到此系统的用户清单( )

A、ps

B、last

C、lastcomm

D、accton

二、编程题

1、牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬币才能让这四根木棍拼凑出正方形。

2、一个完整的括号字符串定义规则如下:

(1)、空字符串是完整的。

(2)、如果s是完整的字符串,那么(s)也是完整的。

(3)、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。

例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。

牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。

3、牛牛选择了一个正整数X,然后把它写在黑板上。然后每一天他会擦掉当前数字的最后一位,直到他擦掉所有数位。 在整个过程中,牛牛会把所有在黑板上出现过的数字记录下来,然后求出他们的总和sum.

例如X = 509, 在黑板上出现过的数字依次是509, 50, 5, 他们的和就是564.

牛牛现在给出一个sum,牛牛想让你求出一个正整数X经过上述过程的结果是sum.


参考答案

一、

1~5:DDCDC

6~10:CBCBB

二、

1、

#include<iostream>
#include<algorithm>
 
using namespace std;
int temp;
int main()
{
    int a, b, c, d;
    int mean,result;
    cin >> a >> b >> c >> d;
    if (b > a)
    {
        temp = a;
        a = b;
        b = temp;
    }
    if (d > c)
    {
        temp = c;
        c =d;
        d = temp;
    }
    if (c> a)
    {
        temp = a;
        a = c;
        c = temp;
    }
    if (d > b)
    {
        temp = b;
        b = d;
        d = temp;
    }
    if ((d<(a + b + c)) && (a >(b + c + d)))
    {
        mean = (b + c)*1.0 / 2 + 0.5; 
    }
    else if (a > (b + c + d)){
        mean = (b + c + d)*1.0 / 3 + 0.5;
    }
    else{
        mean = (a + b + c + d)*1.0 / 4 + 0.5;
    }
    result = abs(a - mean) + abs(b - mean) + abs(c - mean) + abs(d - mean);
    cout << result;
    return 0;
     
}

2、

#include <iostream>
#include <stack>
#include <string>
 
using namespace std;
 
int main(){
    stack<char> s;
    string str;
    cin>>str;
    int n=str.size();
    for(int i=0;i<n;++i){
        if(s.empty())
            s.push(str[i]);
        else if(s.top()=='('&&str[i]==')')
            s.pop();
        else
            s.push(str[i]);
    }
    cout<<s.size()<<endl;
     
    return 0;
}

3、

#include<iostream>
using namespace std;
 
void deal(uint64_t n) {
    bool is_break = false;
    uint64_t l = 0, r = n,mid,sum,tmp;
    while (l <= r) {
        mid = (l + r) / 2;
        sum = 0,tmp=mid;
        while (tmp) {
            sum += tmp;
            tmp /= 10;
        }
        if (sum == n) {
            is_break = true;
            break;
        }
        else if (sum > n)
            r = mid - 1;
        else
            l = mid + 1;
    }
    if (is_break)
        cout << mid << endl;
    else
        cout << "-1" << endl;
}
 
int main() {
    uint64_t n;
    while (cin >> n)
        deal(n);
    system("pause");
    return 0;
}
个人资料
Bingo
等级:9
文章:694篇
访问:38.9w
排名: 1
上一篇: 2018爱奇艺秋季校招C++工程师(第二场)
下一篇:爱奇艺秋季校招Android工程师(第一场)-2018年
猜你感兴趣的圈子:
爱奇艺笔试面试圈
标签: 牛牛、temp、quot、木棍、括号、面试题
隐藏