十道选择
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(i−1)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;
}
}