網易遊戲開發筆試題 lisp表示式求值

2021-07-05 08:17:07 字數 2062 閱讀 1412

按照慣例有這個section,但是木有什麼可寫的,一道筆試題而已~~~

題目如下:

分析:

初看題目,這就是一道很簡單的acm字元處理題,有點類似中綴表示式求值。但是字元題非常需要細心,一不小心就出錯,我的實現是用的棧實現,而且只用了乙個棧,所以實現起來,要處理字元和括號,還有操作符,捉襟見肘。。。應該直接用兩個棧實現,乙個存運算元,乙個存操作符,這樣就方便了~~

上**:

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1000002

#define step int_max

char str[maxn];

enum op;

op isoperator(char c)

int main()

stack

<__int64> _stack;

for( m = 0; m < len; ++m)

}if (str[m] == ' ')

if( str[m] != ')')

if(str[m-1]<='9' && str[m-1]>='0')

else

_stack.push(str[m]-'0'+step);

}else

_stack.push(str[m]);

}if( str[m] == ')')

vec.clear();

while (true)

if(1==vec.size())

_stack.push(0-vec.at(0)+step);

else

_stack.push(vec.at(1)-vec.at(0)+step); //推入結果

break;

}else

if( t == '+')

res=0;

for (int tmpcount=0;tmpcountbreak;

}else

if( t == '*')

int res=1;

for (int tmpcount=0;tmpcountbreak;

}}//操作符

else

if (t!='(')

}//while

}//str[m] == ')'

}//for 遍歷

rrrrrp=_stack.top()-step;

cout

/printf("%s", str.c_str());

over:

continue;

}return

0;}

可能有很多邊界情況需要處理好,所以不容易。這裡用了goto,用了所謂的step來區分數字跟符號,這樣就被迫用了int_max來做,這樣確實坑爹。。。。。。

自己想了幾個測試用例:

9 (+ 1 (* 2 3)))

(2 3)

(- 3 2 1)

(+ (+1 2) (* 2 3) (- 2 1))

(- 2)

(- 32 1)

(-45)

(+ 5 (9))

(+ 5(+6))

輸出結果:

天地遊公司遊戲開發筆試題

不能宣告為虛函式的函式是 不能做switch 的引數型別是 氣泡排序演算法的時間複雜度是 導致堆疊溢位的原因是 平衡二叉樹是指 float x 與 零值 比較的if語句是 static的用途是 請至少說明兩種 internet採用的網路協議是 該協議的主要層次結構是 全域性變數和區域性變數在記憶體中...

網易遊戲實習筆試題

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 電子數字在生活中很常見,而許多的電子數字是由led數碼管製作而成。數字led數碼管一般由7個發光二極體封裝在一起,組成 8 字型,引線在內部連線完成。如下圖所示,我們可以對每個發光管進行編碼從1到7。而數字0到數字9可以由這七...

網易互娛2020校招遊戲研發筆試題

第一題 判斷乙個數的二進位制是否為回文串 ac 方法一 存成陣列之後比較 include include include include using namespace std int t,x,cnt int num 111 int main int flag 1 for int i 0 i2 i ...