日期:2014-05-17  浏览次数:20868 次

配方问题如何计算
有配方原料n种,n是可以统计出来的变量:
原料1  原料1用量%下限    原料1用量%上限    原料1某成分含量
原料2  原料2用量%下限    原料2用量%上限    原料2某成分含量
原料3  原料3用量%下限    原料3用量%上限    原料3某成分含量 
……        ……              ……              ……         
原料n  原料n用量%下限    原料n用量%上限    原料n某成分含量

已经 把原料i的用量上限和用量下限分别存入数组 gcanshu[i,1],gcanshu[i,2] ,并假设原料用量%下限和原料用量%上限均是整数,并且增长步长为1
如何写程序,实现从原料1到原料n每种用量的比例情况下计算原料n某成分含量(计算过程就简写为计算即可).
主要是如何写循环。


   
配方原料,成分计算

------解决方案--------------------
递归更容易理解吧

假设用一个dictionary<key, result>来保存结果集,key类似于"
------解决方案--------------------
n0
------解决方案--------------------
n1
------解决方案--------------------
n2
------解决方案--------------------
n3"(或随便你怎么定义,能表明关系就好),其中的nx表示原料x的比例。

设f(n)为问题,返回结果dictionary<key,result>;calc(gcanshu[n])为计算单个原料n,返回结果dictionary<key,result>
那么
f(0) = calc(0) = 0
f(1) = calc(gcanshu[1])
f(n) = calc(gcanshu[n]) + f(n-1)

所以整个过程可以描述成:
f(n): {
  dictionary<key,value> init;
  if n == 0 return dictionary;
  if n == 1 return calc(gcanshu[n]);
  foreach (childpair<key,result> in f(n-1)) {
    foreach (pair<key,result> in calc(gcanshu[n])) {
      combine(pair<key,result>, childpair<key,result>) -> dictionary<key,value>
    }
  }
  return dictionary;
}
------解决方案--------------------