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条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?