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

 

 

有如下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...以便下一个公式可能用到..

 

因考虑效率问题..

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

 

 

 

 

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]

看不懂,到底是什么计算过程啊?

[quote]String A="a+b";
String B="A+b";
String C="A+B";
String D="C+A+b";[/quote]
你按照什么规则写出的这些算式,C为什么是A+B,D为什么不是B+C