SYNOPSYS新思科技的筆試題

才智咖 人氣:8.84K

SYNOPSYS(新思科技)上海研發中心,原為AVANTI(先驅微電子)上海研發中心,01年12月被合併。目前地址在兆豐大廈(長寧)主要是做EDA軟體。除了LIBRARY組做硬體庫外,其餘組都是運用語言程式設計或測試。畢竟是EDA軟體,所以對VHDL,VERILOG,電路基礎知識也有一定要求。

SYNOPSYS新思科技的筆試題

今天Synopsys筆試內容大致如下,有一題想不起來了,大家幫忙回憶:

1。說出指標和引用的'區別。

1) 引用必須被初始化,指標不必。

3) 不存在指向空值的引用,但是存在指向空值的指標。

2。說下深度優先遍歷和廣度優先遍歷區別。

3。C++語法錯誤判斷。這題很有趣,我記下了,貼出來大家看看:)

class base{

private: int i;

public: base(int x){i=x;}

};

class derived: public base{

private: int i;

public: derived(int x, int y) {i=x;} ---------(1)

void printTotal() {int total = i+base::i;} ----------(2)

};

(1)“base” : 沒有合適的預設建構函式可用

(2)“base::i” : 無法訪問 private 成員(在“base”類中宣告)

public: derived(int x, int y):base(y) {i=x;} ---------(1)

程式設計師定義建構函式後,編譯器就不會自動生成預設構造函數了,而派生類必須呼叫基類的建構函式,所以出錯

4。實現strcpy函式。

5。程式設計判斷字串是否對稱。如:ABCCBA對稱,ABCDBA就不對稱。

6。1,2,5,10四個基數任意次數組合相加得到一個數N,求所有可能組合。

揹包問題(非0/1)

#include "stdafx.h"

using namespace std;

const int INPUT = 10;

const int N = 10;

int a[N];

int b[4] = {10, 5, 2, 1

};

void inita()

{

for(int i = 0; i < N; i++)

{

a = 0;

}

}

bool ok(int num, int k)

{

return num >= a[k] && a[k] <= a[k-1];

}

void backtrack(int num, int k)

{

if(k >= INPUT || num == 0)

{

if(num == 0)

{

for(int i = 0; i < k; i++)

{

cout << a << " + ";

}

cout << endl;

}

}

else

for(int i = 0; i < 4; i++)

{

a[k] = b;

if(ok(num, k))

backtrack(num -a[k], k+1);

}

}

int main(void)

{

inita();

a[-1]=INPUT;

backtrack(INPUT, 0);

return 0;

}

7。二元樹前序遍歷得到表示式。

8。題目意思不是很明白,可能是推出產生式的意思吧。

9。用盡可能多的方法來表示陣列a[2][3]裡第一個元素的地址。

cout << (int)&a[0][0] << endl;

cout << (int)&a[0] << endl;

cout << (int)a << endl;

10。迴圈連結串列的節點對換和刪除。

11。hash表實現。