按照慣例有這個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 ...