藍橋杯 演算法訓練 ALGO 57 刪除多餘括號

2022-06-24 03:15:08 字數 2427 閱讀 9655

演算法訓練 刪除多餘括號  

時間限制:1.0s   記憶體限制:512.0mb

問題描述

從鍵盤輸入乙個含有括號的四則運算表示式,要求去掉可能含有的多餘的括號,結果要保持原表示式中變數和運算子的相對位置不變,且與原表示式等價,不要求化簡。另外不考慮'+' '-'用作正負號的情況,即輸入表示式不會出現(+a)或(-a)的情形。

輸入格式

表示式字串,長度不超過255,  並且不含空格字元。表示式中的所有變數都是單個小寫的英文本母, 運算子只有加+減-乘*除/等運算符號。

輸出格式

去掉多餘括號後的表示式

樣例輸入

樣例一:

a+(b+c)-d

樣例二:

a+b/(c+d)

樣例三:

(a*b)+c/d

樣例四:

((a+b)*f)-(i/j)

樣例輸出樣例一:

a+b+c-d

樣例二:

a+b/(c+d)

樣例三:

a*b+c/d

樣例四:

(a+b)*f-i/j

題目解析:

本道題其實化簡表示式,這是我們小學學到的內容,即題目中寫到:結果要保持原表示式中變數和運算子的相對位置不變,且與原表示式等價,不要求化簡。

遍歷輸入的表示式,如果發現左括號,則找到與它對應的右括號,並根據括號左右及中間內容分情況處理該括號是否可以刪除。在遞迴地處理過程中,如果又發現了括號,則先處理發現的這個括號是否可以刪除,處理結束後,返回上乙個括號,繼續遞迴處理,直至所有的括號處理完成。

有以下幾種情況括號是不可以刪除的:

括號前邊為 「 - 」,且括號中為 「 + 」 或 「 - 」,不能刪除;

括號前邊為 「 / 」,不能刪除;

括號後為 「 * 」,且括號中為 「 + 」 或 「 - 」,不能刪除;

有以下幾種情況是可以刪除:

括號前和後為 「 + 」 或 「 - 」,括號中為 「 + 」 或 「 - 」 或 「 * 」 或 「 / 」,可以刪除,但是注意:若括號前為 「 - 」,括號中為 「 + 」 或  「 - 」,在前邊已經處理了,所以可以排除這種情況;

括號前為 「 * 」,括號中為 「 * 」 或 「 / 」,括號後為「 + 」 或 「 - 」 或 「 * 」 或 「 / 」,可以刪除;

其他情況不能刪除。

示例**:

1 #include23//

檢測括號是否可以刪除

4int check(char s, int left, int

right)519

else

if ((s[i] == '

+' || s[i] == '

-' ) && leftcount == 1)20

23}24}

2526

//處理 ' /(a +|-|*|/ b) '

27if (s[left-1] == '/'

)283132

//處理 ' +(a +|-|*|/ b) +|- '

33if (s[left-1] != '

*' && s[left-1] != '

/' &&

34 s[right+1] != '

*' && s[right+1] != '/'

)353839

//處理 ' *(a *|/ b) +|-|*|/ '

40 i =left;

41 leftcount = 1;42

while (++i 47else

if ((s[i] == '

*' || s[i] == '

/' ) && leftcount == 1)48

51}52return0;

53}5455

//刪除多餘的括號

56int delexcessbrackets(char s, int

index)

5764

if (s[index] == '

(') //

如果為左括號,找到右括號的下標

6573

}74 index++;

75}

76}

7778

intmain()

7991}92

93return0;

94 }

藍橋杯 演算法訓練 ALGO12

問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3時,有...

藍橋杯 ALGO 83 演算法訓練 階乘

問題描述 乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13 就已經比較大了,已經無法存放在乙個整型變數中 而35 就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算n 而是去計算...

藍橋杯 ALGO 33 演算法訓練 數列

演算法訓練 數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 30,31,30 31,32,30 32,...