英伟达笔试题回忆

今天是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;
}
输出:

   1    2    3    4    5
   6    7    8    9   10
  11   12   13   14   15
  16   17   18   19   20
  21   22   23   24   25
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。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。


有好的思路么?

你可能感兴趣的:(笔试面试)