伊莉討論區

標題: 利用堆疊(stack)求四則運算 [打印本頁]

作者: eyic6421965    時間: 2013-11-8 06:39 PM     標題: 利用堆疊(stack)求四則運算

輸入說明(INPUT):
第一行是小朋友輸入的數學式子。(數學式子長度 <32768)
數學符號包含 : 數值 +,-,*,/,(,),[,],{,}
括號最多為三層,由內而外為(), [] ,{}


輸出說明(OUTPUT):
若數學式子正確,輸出 "AC"(正確答案);反之, 數學式子錯誤,輸出 "WA"(錯誤答案)
(請輸出執行時間及記憶體空配置 )

輸入範例:
{ [ 2 1 * ( 2 / 3 ) ] - 3 3 }

{ [ 3 3 * ( 2 - 3 ) ] * ( 3 + 3 }


輸出範例:
AC
WA
Time : 0.002 seconds
Memory Usage :2789376 bytes

跪求各路神手相助~~~~~
作者: dh3014    時間: 2013-11-8 09:01 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2013-11-9 12:09 PM

你在講的題目
是巢狀分析

小括號是一組
中括號是一組
大括號是一組

如不考慮數字的部份
只需要對+-*/以及( ) [  ] { }做檢查

所以你只需要設計好規則

例如 + - * / 這四個運算符號不可以連續
"(" 之後只能出現 ")"
"[" 之後雖然允許 "(" ")" 卻需要使用 "]" 作結束
所以這稱之為解析器
運算式解析器

一般常見的做法
直觀的做就夠了
for迴圈裏使用
switch(str[i]) {
case '+' :
case '-' :
case '*' :
case '/' :
     i++;
     if(str[i] > '0' && str[i] < '9' ) continue;
     break;
case '(' :
case ')' :
case '[' :
case ']' :
case '{' :
case '}' :
      checkout(str[i]);
      break;
}

只有checkout需要對堆疊裏的括號做檢查





歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!