商汤科技2018校招X86/ARM代码优化工程师笔试第二场

时长:120分钟 总分:100分

129浏览 0人已完成答题

题型介绍
题型 单选题 判断题 简答题
数量 5 5 3
1.
extern关键字的作用是什么?
问题详情




2.
关于virtual void Draw()=0,下面说...
问题详情

关于virtual void Draw()=0,下面说法正确的有几个?
(1)它是纯虚函数
(2)它在定义它的类中不能实现
(3)定义它的类不可实例化 
(4)如果一个类要继承一个ADT类,必须要实现其中的所有纯虚函数




3.
对于类的常成员函数的描述正确的是
问题详情




4.
有下类定义: Class A{ Char*a Public: A()...
问题详情

有下类定义:
Class A{
Char*a
Public:
A():a(0){}
A(char*aa) {//把aa所指字符串拷贝到a所指向的存储空间
A=___________________
Strcpy(a,aa)}
~A(){delete [] a}
}





5.
无条件转移指令功能是将指令中的地址码送入
问题详情




6.
C/C++的编译包括几个部分,分别是[$##$],[$##$]和[$##$]。
问题详情

C/C++的编译包括几个部分,分别是(),()和()。
7.
在64位机器上分别使用-m32和-m64编译如下代码并在64位机器上执行,...
问题详情

64位机器上分别使用-m32-m64编译如下代码并在64位机器上执行,则输出为:(),()
#include <stdio.h>
int main(int argc, char * argv[])
{
        void* number =  0      printf("%d\n",sizeof(&number))
}

8.
函数如下: int function(x) { int f...
问题详情

函数如下:
int function(x)  { 
    int flag = 0 
    while(x)  { 
          x = x&(x-1) 
          flag ++ 
     } 
    return flag  
} 

function(9561) =()
9.
typedef union { Short i int ...
问题详情

typedef union {
    Short i
    int k[5]
    char c
} Mat
Typedef struct {
    int i
    Mat j
    double k
}Like

则语句 printf("%d",sizeof(Like)+sizeof(Mat))的执行结果是:()
10.
关键词[$##$]用于声明敏感变量(默认其他线程随时可以改变其值,因此每次...
问题详情

关键词()用于声明敏感变量(默认其他线程随时可以改变其值,因此每次运算都会读取新的值,避免误读缓存数据引发的错误)。
11.
尝试对下面这段矩阵乘法代码使用向量化技术进行优化。 void gemm...
问题详情

尝试对下面这段矩阵乘法代码使用向量化技术进行优化。
void gemm(int M, int N, int K, const float* a, const float* b, float* c) {
    for (int i = 0 i < M ++i) {
        for (int j = 0 j < N ++j) {
            float sum = 0
            for (int kk = 0 kk < K ++k) {
                sum += a[i * K + kk] * b[kk * N + j]
            }
            c[i * N + j] = sum
        }
    }
}

答题说明:该题为手动判卷,答案只要写对即可,不用严格满足字符比对。
12.
使用OpenMP或者Pthread对下面这段计算各行的积的累加的代码进行多...
问题详情

使用OpenMP或者Pthread对下面这段计算各行的积的累加的代码进行多线程优化。
int sum = 0
for (int i = 0 i < m ++i) {
    int temp = 1
    for (int j = 0 j < i ++j) {
        temp *= a[i * m + j]
    }
    sum += temp
}

答题说明:该题为手动判卷,答案只要写对即可,不用严格满足字符比对。
13.
时下有一款很流行的网络游戏名叫王者荣耀。在这款游戏中,通过消灭敌方小兵可以...
问题详情

时下有一款很流行的网络游戏名叫王者荣耀。在这款游戏中,通过消灭敌方小兵可以获得一些金钱。在你开始攻击一个小兵后,你会持续攻击直到完全消灭它为止。只有消灭它,你才能获得它的全额金钱。在这之前,你是不会从它身上获得金币收益的。

现在已知有totalKind种小兵总共n个。每种小兵的血量以及消灭它能够得到的金钱是相同的。你每次攻击能够对小兵造成的伤害都是一个确定的常量。同一次攻击只能攻击一个小兵。

请问,在你攻击k次以后,你最多能够获得多少金钱?

请通过完成下列函数来实现这一计算。其中,n是小兵的数量,k是你能攻击的次数,damage是你每次攻击所能造成的伤害,health[i]表示第i种小兵的血量,money[i]表示消灭一个第i种小兵能够获得的金钱,kind[i]表示第i个小兵所属的种类。

int MaxMoney(int n, int k, int totalKind, int damage, int health[], int money[], int kind[])

时间限制为1秒钟。内存限制为128MB

对于20%的数据,n <= 10

对于70%的数据,n <= 10000

对于100%的数据,n <= 100000, K <= 1000, totalKind <= 1000, damage <= 100, health[i] <= 1000, money[i] <= 1000
答题说明:该题为手动判卷,答案只要写对即可,不用严格满足字符比对。