英伟达笔试题回忆
今天是2013-10-19,去笔试了英伟达(嵌入式工程师),题目很多,试卷发下来13页!!!题目涉及C/C++以及linux的问题,其中还有一道汇编题(不会做)。
因为只会C/C++,所以只做了关于这方面的,有两道题印象深刻(想了很久),其他的要么不记得了要么根本没有看。现在回忆如下,希望后来者有帮助。
其中一道:已知一个自然数S(S>=10)可以分成n个自然数之和,S=a1+a2+.......+an;求一种分法使的a1*a2*......*an最大,写出实现的函数,并数学理论推导一下证明你的算法。
其中一道:已知一个数组Matrica[M][N],按顺时针打印数组,如4*4数组
Matrica[4][4]={ 1,2,3,4
5,6,7,8
2,3,4,6
2,5,7,9}打印成1,2,3,4,8,6,9,7,5,2,2,5,6,7,4,3
参考:http://blog.163.com/huang_zhong_yuan/blog/static/17497528320115304354412/
#include
#include
void PrintMatrixClockwisely(int** a, int row, int col){
if(a == NULL || row <= 0 || col <= 0)
return;
int i = 0, j = 0, k = 0;
for(i = 0;
i < row/2 + row%2;
i++){
for(j = i;
j < col - i;
j++){
cout << a[i][j] << " ";
}j--;
for(k = i + 1;
k < row - i;
k ++)
cout << a[k][j] << " ";
k=row - i - 1;
j=col - i - 2;
for(;
j >= i;
j--)
cout << a[k][j] << " ";
k = row - i - 2;
j = i;
for(;
k >i;
k--)
cout << a[k][j] << " ";
}
}int main(){
int i;
const int row = 5;
const int col = 5;
int** a = (int**)(new int[row]);
for(i = 0;
i < row;
i++)
a[i] = new int[col];
int k = 1;
for(i = 0;
i < row;
i++){
for(int j = 0;
j < col;
j++)
a[i][j] = k++;
}
for(i = 0;
i < row ;
i++){
for(int j = 0;
j < col;
j++)
printf("%4d ", a[i][j]);
cout << endl;
}
PrintMatrixClockwisely(a, row, col);
return 1;
}
输出:
12345
678910
1112131415
1617181920
2122232425
1 2 3 4 5 10 15 20 25 24 23 22 21 16 11 6 7 8 9 14 19 18 17 12 13
还有一道问答题:虚函数是什么?在C++如何实现?虚函数表如何实现虚函数功能(C)。
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。虚函数可以做到动态绑定,为了实现动态绑定,编译器是通过一个虚函数表,在运行时间接的调用实际上绑定的函数来达到动态绑定。虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。
【英伟达笔试题回忆】有好的思路么?
推荐阅读
- 蓝桥杯试题
- iOS面试题--基础
- 年薪30万的Java架构师必会的springboot面试题
- 阿里Web前端面试题
- 2019腾讯笔试题
- 分享几个前端面试题目
- 2020年MySQL数据库面试题总结
- python面试题----基础(80题)
- C++面试题目总结
- Career技术部面试题(php部分)