zoukankan      html  css  js  c++  java
  • 蓝桥杯-逆波兰表达式-java

    /* (程序头部注释开始)

    * 程序的版权和版本声明部分

    * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 

    * All rights reserved.

    * 文件名称: 蓝桥杯赛题                           

    * 作    者:   彭俊豪               

    * 完成日期:   2016   年 04月 01日

    * 版 本 号:      001   

    * 对任务及求解方法的描述部分

    * 问题描述:

    正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便。

    例如:3 + 5 * (2 + 6) - 1

    而且,常常需要用括号来改变运算次序。

    相反,如果使用逆波兰表达式(前缀表达式)表示,上面的算式则表示为:

    - + 3 * 5 + 2 6 1

    不再需要括号,机器可以用递归的方法很方便地求解。

    为了简便,我们假设:

    1. 只有 + - * 三种运算符
    2. 每个运算数都是一个小于10的非负整数

    下面的程序对一个逆波兰表示串进行求值。
    其返回值为一个数组:其中第一元素表示求值结果,第二个元素表示它已解析的字符数。


    static int[] evaluate(String x)
    {
    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 = evaluate(x.substring(1));
    int[] v2 = __________________________________________; //填空位置

    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]};
    }

    * 输入描述: 

    * 程序输出:  请分析代码逻辑,并推测划线处的代码,通过网页提交。

    * 程序头部的注释结束

    */

    上代码:

    public class Main {

      public static void main(String[] args) {
        int[] arr = evaluate("-+3*5+26*1-64");
        for (int i = 0; i < arr.length; i++) {
          System.out.println(arr[i]);
        }
      }
      static int[] evaluate(String x)
      {
        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 = evaluate(x.substring(1));
          int[] v2 = evaluate(x.substring(v1[1]+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]};
      }
    }

  • 相关阅读:
    (三)通用定时器的定时功能(不使用中断)
    (二)STM32中中断优先级理解
    (一)通用定时器的相关介绍
    Ambari client
    Ambari的资源池管理
    Sentry的授权模型
    关于yum
    Ambari-HDP
    Ambari的API调用
    CentOS上面搭建SVN服务器
  • 原文地址:https://www.cnblogs.com/pengjunhao/p/6670136.html
Copyright © 2011-2022 走看看