【数字天空】UE4客户端开发工程师 线上笔试B卷

十道选择

1.依次入栈12345,哪种出栈顺序不可能
答:43512

2.定义数组int a[3][4][2],第20个元素是?
答:a[2][1][1]

3.下面这个程序的输出是?

#include <iostream>
using namespace std;

int main()
{
    unsigned int value = 1024;
    bool condition = *((bool*)(&value));
    if (condition) value++; condition = *((bool*)(&value));
    if (condition) value++; condition = *((bool*)(&value));
    cout << value<<' '<<condition;
}

答:1024 0

分析:
将1024化成十六进制为:0x00000400
题中&value取地址相当于取首地址(低地址)

若数据是采用大端存储方式,则低地址对应的是数据的高位,即最左边的0.
则condition = 0,不执行两个if语句,则value不变,还是1024,

若数据是采用小端存储方式,则低地址对应的是数据的地位,即最右边的0.
则condition = 0,不执行两个if语句,value值还是1024.

所谓的大端存储,即低地址存放高位数据,高地址存放低位数据。
对应的小端存储,即低地址存放低位数据,高地址存放高位数据。

对于一个数据0x12345678,对应大小端存储方式如下:

小端存储方式
0x00 |78|
0x01 |56|
0x02 |34|
0x03 |12|

大端存储方式
0x00 |12|
0x01 |34|
0x02 |56|
0x03 |78|
注:
一个字节地址空间占8个位(bit),而一个十六进制数据位占4位(bit),
所以一个内存地址可以存两个十六进制数据位。

4.定义a=2,b=3,c=4,下面这个表达式的输出是?

(a<b&&!c)?++b:a--;

答:2

5.关于友元函数说法错误的是?
友元函数需要通过对象或者指针调用

6.关于虚函数,下列说法错误的是?
子类调用非虚函数时调用的是子类函数

7.下列排序算法中,空间复杂度最高的是?
A.冒泡排序 B.堆排序 C.希尔排序 D.快速排序
答:D
在这里插入图片描述

8.设有一m叉树,度为1的节点为N1个,度为2的节点为N2个…度为m的节点为Nm个,请问有多少叶子节点?
答: 1 + ∑ i = 2 m ( i − 1 ) N i 1+\sum_{i=2}^m(i-1)N_i 1+i=2m(i1)Ni

9.下面这个程序的输出是?

#include <iostream>
using namespace std;

int i = 0;
int fun(int n) {
    static int a = 2;
    a++;
    return (a * n);
}

int main()
{
    int k = 5;
    {
        int i = 2;
        k += fun(i);
    }
    k += fun(i);
    cout << k;
}

答:11

分析:作用域内i是局部变量

10.从去掉大小王的一副52张的扑克牌里随机抽两张,同色概率是多少?
答:任意抽两张有51*52种可能,同色有52*25种可能,所以是25/51

五道问答

1.顺序表和链表的区别
答:顺序表空间连续,链表不连续,顺序表随机访问数据复杂度为O(1),链表为O(n),顺序表插入删除元素复杂度为O(N),链表为O(1)

2.简述向量的点乘和叉乘以及向量归一化的意义
答:点乘描述了两个向量的相似程度,还可以用来表示投影,叉乘得到与原两个向量垂直的向量,归一化用于表示方向向量,不关心大小的时候

3.C++11有哪些默认函数
答:

构造函数(construct)
析构函数(destruct)
复制构造函数(copy construct)
赋值(assign)
移动构造函数(move construct)
移动赋值(move)

4.二叉树镜像
每次交换子节点,直到叶节点为止

struct TreeNode{
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution{
public:
    TreeNode* Mirror(TreeNode* pRoot){
         if(pRoot == nullptr)
            return NULL;
         else{
            swap(pRoot->left, pRoot->right);
            Mirror(pRoot->left);
            Mirror(pRoot->right);}
         return pRoot;
    }
};

5.求子数组的累乘最大值
答:类似前缀和,用前缀乘

class Solution{
    public:
        double maxProduct(vector<double> arr){
            double max1 = INT_MIN;
            for(int i = 0; i < arr.size(); i++){
                if(i != 0)
                    arr[i] = max(arr[i], arr[i] * arr[i-1]);
                max1 = max(max1, arr[i]);
            }
            return max1;
        }
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ycr的帐号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值