有如下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