演算法題 包含MIN MAX運算的四則運算

2021-09-27 13:24:29 字數 2776 閱讀 1851

題目描述

輸入4則執行算表示式, 額外再定義了兩種運算操作

min(a,b)計算最小值

max(a,b)計算最大值

表示式不包括空格, 可以使用()設定優先順序, 數字都是整數, 且輸入一定合法, 不需要校驗

例如 min(1,(2+3)*4)+(1+2)*3 的值為10

思路

遇到加減操作, 它之前的操作的優先順序不會比現在低, 可以都消除掉.

而當前的加減操作還不能消,先存到棧中

遇到乘除操作, 只能先消除掉它之前的乘除操作

遇到圓括號, 整個圓括號內的表示式最終可以消除1個值

js實現

開啟 將以下**複雜上去, 就可以直接執行了

// 用於字串轉整數

const charcode_0 =

'0'.

charcodeat(0

);const charcode_9 =

'9'.

charcodeat(0

);// 擴充套件陣列介面

array.prototype.

peek

=function()

const operations =

,'-'

:function

(a, b)

,'*'

:function

(a, b)

,'/'

:function

(a, b)

,'i'

:function

(a, b)

,'a'

:function

(a, b),}

// 簡化字元遍歷

class

stringbuffer

hasnext()

peek()

poll()

skip

(n)back

(n)// 讀取乙個整數, 假設當前位元組一定是個數字

readnumber()

else

}return n;}}

// 計算表示式

function

doeval

(buf)

break

;case

'+':

case

'-':

// 這之前的操作符可能的情況有

// 1. 1個加減,跟隨1個乘除, 從後往前消兩次

// 2. 1個加減操作, 消掉

// 3. 1個乘除操作, 消掉

// 不可能出現多個連續同級操作

calc

(operatorstack, operandstack)

; operatorstack.

push

(ch);}

break

;case

'*':

case

'/':

else

} operatorstack.

push

(ch);}

break

;case

'(':

break

;case

')':

// 計算圓括號內的表示式

while

(operatorstack.length >0)

const b = operandstack.

pop();

const a = operandstack.

pop();

const r = operations[op]

(a, b)

; operandstack.

push

(r);}}

break

;case

',':

default:}

lastopisleftparetness = parentness;

}calc

(operatorstack, operandstack)

;return operandstack.

pop();

}function

calc

(operatorstack, operandstack)

operatorstack.

pop();

const b = operandstack.

pop();

const a = operandstack.

pop();

// 注意a, b的先後順序

const r = operations[op]

(a, b)

; operandstack.

push

(r);}}

function

evaluate

(express)

const thiz =

this

;function

main()

= $, expect: $,

$`);

} console.

log(output.

join

('\r\n'))

;// 瀏覽器上執行

if(thiz.document)

}main()

;

JAVA經典演算法四題

程式4 題目 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為...

演算法題 四數之和

題目描述 給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2...

程式設計題 四則運算

請實現如下介面 功能 四則運算 輸入 strexpression 字串格式的算術表示式,如 3 2 返回 算術表示式的計算結果 public static intcalculate string strexpression 約束 pucexpression 字串中的有效字元包括 0 9 pucexp...