fq_zxy 2010-05-21 11:05
浏览 232
已采纳

求一个算法问题...分数不够可以再加...

 

 

有如下2组数据

  int a=100;
  int b=200;
  int c=300;

 

  String A="a+b";
  String B="A+b";
  String C="A+B";
  String D="C+A+b";

 

 

即B的结果为..A+b也就是a+b+b=600;以此为算法.算出D的计算结果.

..要求.大写字母的计算过程只能有一次.

比如说.D,,应该为A+B+A+b; 其中第一次算出了A..则下面的A直接引用其值便可..不需再算.

D算出来了..则D包含的子项.C,A,B的结果都要算出来.而且要保留..以便如果有E产生..则可直接引用.

注意..大小写字母的项目都有很多.

 

此题为我用JAVA转换过来的..

原本是一张数据库表..本来是要求用存储过程..函数.或者sql算的..

 

如附件所示:

 

其实也就是在算D的过程中把其中包含的子项..求出来..并赋值到.val...以便下一个公式可能用到..

 

因考虑效率问题..

每一个大写字母只能算一次..

 

 

 

 

  • 写回答

3条回答 默认 最新

  • weixin_42518082 2010-05-21 12:31
    关注

    java 写的, 其实就是递归....
    [code="java"]
    package demo;

    import java.util.HashMap;
    import java.util.Map;

    /**

    • @author yeyong
      */
      public class Test24 {

      public static void main(String args[]) {
      int a = 100;
      int b = 200;
      int c = 300;

      String A = "a+b"; // 300
      String B = "A+b"; // 500
      String C = "A+B"; // 800
      String D = "C+A+b"; // 1300

      Map context = new HashMap();
      context.put("a", a);
      context.put("b", b);
      context.put("c", c);
      context.put("A", A);
      context.put("B", B);
      context.put("C", C);
      context.put("D", D);

      System.out.println("D = " + getVarValue(context, "D"));
      System.out.println("data : " + context);
      }

      private static int getVarValue(Map data, String var) {
      Object o = data.get(var);
      if (o instanceof Integer) {
      return (Integer) o;
      } else if (o instanceof String) {
      String exp = (String) o;
      int sum = 0;
      for (String v : exp.split("\s*\+\s*")) {
      int value = getVarValue(data, v);
      sum += value;
      }
      data.put(var, sum);
      return sum;
      }
      throw new RuntimeException("ERROR");
      }
      }
      [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题