Copyright (C) IOI日本委員会 1995. All rights reserved.


問題4.

 負でない整数の間の加法+、減法−、乗法* を行う数式から不要な括弧を取り除くことを考える。例えば、次のように したい。

  a. (((123))) → 123
  b. 1+(23) → 1+23
  c. 1+(2+3)+4 → 1+2+3+4
 d. 1+(2+3)*4 → 1+(2+3)*4
 e. 1+(2*3) → 1+2*3
 f. 1-(23) → 1-23
 g. 1-(2*3) → 1-2*3
 h. 1-(2+3) → 1-(2+3)
 i. 1*(23) → 1*23
 j. 1*(2*3) → 1*2*3
 k. 1*(2+3) → 1*(2+3)
 l. 1+((2+3*(4)*5)*6-((7*(8+9))+10)) → 1+(2+3*4*5)*6-(7*(8+9)+10)

この例の d, h, k は, 残った括弧を取り除くと本質的に異なる数式になって しまうので, これ以上括弧を取り除くことは出来ない。

 このような処理を行うプログラムを作りたい。数式は 0〜9, *, +, −, (, ) だけからなる1文字以上100文字以下の文字列として キーボードから入力し、それから不要な括弧を取り除きディスプレイに 出力する。ただし、*、+、− は2項演算子として のみ用い、* の優先順位は +、− よりも高く、+ と − は同じである。 入力された数式は正しい形をしているものとして、エラーチェックはしなくて よい。
 アルゴリズムがどのようなものであるか、その要点を述べ(プログラム 内にコメントとして書いてもよい)、それに従ったプログラムを書きなさい。


JOIホームページへ戻る

JOI'95へ戻る