こんにちは、私は小さな灰色の類人猿で、バグを書くことができるプログラマーです!
私のコラム「DailyBlueBridge」に注目してください。このコラムの主な機能は、近年のBlue Bridge Cup州の大会や決勝戦の本当の質問を共有し、アルゴリズムのアイデア、データ構造などを分析することです。その中に存在し、あなたが学ぶのを助けるコンテンツより多くの知識と技術に!
タイトル:逆ポーランド記法
通常の式は中置式と呼ばれます。演算子は中央にあり、主に人間が読むためのものであり、機械で解くのは便利ではありません。
例:3 + 5 *(2 + 6)-1
また、多くの場合、テーブル内の操作の順序に括弧を使用する必要があります。
逆に、逆ポーランド式(プレフィックス式)を使用すると、上記の式は次のようになります。
-+ 3 * 5 + 2 6 1
ブラケットは不要になり、マシンは再帰的な方法を使用して簡単に解決できます
簡単にするために、次のように仮定します。
1. +-* 3つの演算子のみ
2.各オペランドは10未満の負でない整数です
次のプログラムは、逆ポーランド表現文字列を評価します。
戻り値はデータの一部です。最初の要素は評価結果を表し、2番目の要素は解析した文字数を表します。
static int [] evaluste(Stringx){
if (x.length()== 0){
新しい intを返す[] {0,0};
}
char c =x.charAt(0);
if (c> ='0'&&c<='9'){
新しい intを返す[] { c-'0 '、1};
}
int []v1 = evaluste(x.substring(1));
int []v2 =_________________________________; //空欄に記入
int v =整数。MAX_VALUE ;
if(c=='+')v =v1[0] +v2[0];
if(c=='*')v =v1[0] *v2[0];
if(c=='-')v =v1[0]-v2[0];
新しい intを返す[] { v、1 +v1[1] +v2[1]};
}
コードロジックを分析し、下線でコードを推測して、Webから送信してください
注:不足しているコードのみを回答として使用し、余分なコード、記号、説明テキストは入力しないでください。!!
問題解決のアイデア:
この問題を解決するための鍵は、ステムのソースコードを読み、各行に実装される特定の機能を理解してから、プログラム設計の主なアイデアを理解し、要件に従って空白を埋めることです茎に。
ソースコードの具体的な説明については、以下の回答を参照してください。
回答のソースコード:
package 一三年省赛真题; public class Year2013_t6 { public static void main(String[] args) { //原式子:3+5*(2+6)-1=42 int a[] = evaluste("-+3*5+261"); System.out.println(a[0]); } /** * 逆波兰表达式函数 * -+3*5+261 * @param x 传入的逆波兰表达式 * */ static int [] evaluste(String x) { //如果传入的字符串长度为0,说明该字符串无效 if (x.length()==0) { return new int[] {0,0}; } char c = x.charAt(0); //获取到字符串的第一个字符 if (c>='0'&&c<='9') { //判断该字符是不是数字 return new int[] {c-'0',1}; //如果是数字,返回该数字和处理的字符数 } int[] v1 = evaluste(x.substring(1)); //如果第一个字符是运算符,截取后面的部分 int[] v2 = evaluste(x.substring(1+v1[1])); //填空位置 截取上一步没有截取到的部分 int v = Integer.MAX_VALUE; //根据第一个字符的类型。对后面返回的结果进行处理 if(c=='+') v = v1[0] + v2[0]; if(c=='*') v = v1[0] * v2[0]; if(c=='-') v = v1[0] - v2[0]; return new int[] {v,1 + v1[1] + v2[1]}; //返回处理结果 } }
サンプル出力:
欠点や改善点がありますので、友達にメッセージを残して一緒に学んでもらいたいです!
興味のある友達はコラムをフォローできます!
リトルグレイエイプは一緒に進歩するためにあなたに同行します!
最後に、2020 Blog Starの選考に参加しています。投票にご協力ください!
投票リンク:https ://bss.csdn.net/m/topic/blog_star2020/detail?username = weixin_44985880