最近我经历了四轮Synopsys对研发高级工程师的面试1
第1轮:
基于输出的问题:
-
C++
int j = 0; for(int i = n; i > 1; i = i/2) j++; int add(int &a, int &b) { int c = a + b; return c; } int main() { int int1, int2, sum; sum = add(int1, int2); }
C++
int a =10; int &r = a; int b = 25; r = b; r++; cout << r << endl << a << endl << b << endl; void printArray(int A[]) { // write code here } int main() { int Arr[5] = {2, 4, 6, 8, 10}; printArray(Arr); return 0; }
C++
void ChangeArray(int A[], int n) { for(int i = 0; i < n; i++) A[i]++; } int main() { int Arr[5] = {2, 4, 6, 8, 10}; ChangeArray(Arr, 5); for(int i = 0; i < 5; i++) cout << Arr[i] << " "; return 0; }
C++
void func(int n) { cout << n; func(n-1); } int main() { func(3); return 0; } int func(int n) { static int x = 0; if(n<=0) return 0; x++; return func(n-1) + x; } main() { func(5); }
C++
void foo(int n, int sum) { if(n==0) return; int k = n%10; int j = n/10; sum = sum + k; foo(j, sum); cout << k << ", "; } int main() { int a = 2048, sum = 0; foo(a, sum); cout << sum << endl; }
C++
int j = 0; for(int i = n; i > 1; i = i/2) j++; int i = n; 8 int j = 0; while(i > 1) { j++; i = i/2; }
C++
void printArray(int A[]) { // write code here int len = sizeof(A)/sizeof(A[0]); for(int i = 0; i < len; i++) { printf("%d ", A[i]); } } int main() { int Arr[5] = {2, 4, 6, 8, 10}; printArray(Arr); return 0; }
C++
int func(int n) { static int x = 0; if(n<=0) return 0; x++; return func(n-1) + x; } main() { func(5); }
C++
void foo(int n, int sum) { if(n==0) return; int k = n%10; int j = n/10; sum = sum + k; foo(j, sum); cout << k << ", "; } int main() { int a = 2048, sum = 0; foo(a, sum); cout << sum << endl; }
-
C++
int a =10; int &r = a; int b = 25; r = b; r++; cout << r << endl << a << endl << b << endl; void printArray(int A[]) { // write code here } int main() { int Arr[5] = {2, 4, 6, 8, 10}; printArray(Arr); return 0; }
-
C++
void ChangeArray(int A[], int n) { for(int i = 0; i < n; i++) A[i]++; } int main() { int Arr[5] = {2, 4, 6, 8, 10}; ChangeArray(Arr, 5); for(int i = 0; i < 5; i++) cout << Arr[i] << " "; return 0; }
-
C++
void func(int n) { cout << n; func(n-1); } int main() { func(3); return 0; } int func(int n) { static int x = 0; if(n<=0) return 0; x++; return func(n-1) + x; } main() { func(5); }
-
C++
void foo(int n, int sum) { if(n==0) return; int k = n%10; int j = n/10; sum = sum + k; foo(j, sum); cout << k << ", "; } int main() { int a = 2048, sum = 0; foo(a, sum); cout << sum << endl; }
-
C++
int j = 0; for(int i = n; i > 1; i = i/2) j++; int i = n; 8 int j = 0; while(i > 1) { j++; i = i/2; }
-
C++
void printArray(int A[]) { // write code here int len = sizeof(A)/sizeof(A[0]); for(int i = 0; i < len; i++) { printf("%d ", A[i]); } } int main() { int Arr[5] = {2, 4, 6, 8, 10}; printArray(Arr); return 0; }
-
C++
int func(int n) { static int x = 0; if(n<=0) return 0; x++; return func(n-1) + x; } main() { func(5); }
-
C++
void foo(int n, int sum) { if(n==0) return; int k = n%10; int j = n/10; sum = sum + k; foo(j, sum); cout << k << ", "; } int main() { int a = 2048, sum = 0; foo(a, sum); cout << sum << endl; }
- 使用前序和中序遍历构建二叉搜索树
- C++中的虚函数问题
第二轮:
- 使用栈设计队列
- 下一个较大的元素和上一个较小的元素
- 在 C++ 中声明二维数组
- 以下每个声明的含义
const char* p; // pointer itself is constant char * const p; // value is consstant const char * const p; // both are constants
- 设计自己的向量类以及向量和数组的区别。
第 3 轮:
- BST 中的第二大元素。
- 在有向和无向图中循环
- 与虚函数和构造函数相关的基本 C++ 问题。
第 4 轮:
- 查找系列中的下一个数字
3, 5, 8, 13, 22 3 * 2 = 6 - 1 5 5 * 2 = 10 - 2 8 8 * 2 = 16 - 3 13 13 * 2 = 26- 4 22 22 * 2 = 44- 5 39
- 将字符串数字转换为整数,如 atoi 并确保覆盖正确的测试用例
- 为什么要寻求改变和其他一些行为问题。