首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

配方有关问题怎么计算

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

配方问题如何计算
有配方原料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;
}
------解决方案--------------------


 只能是递归


    public const int nMAX = 4;
    public static int[,] gcanshu = new int[nMAX, 3]
            {
                {0,2,3},
                {0,3,4},
                {0,2,8},
                {0,3,10},
            };

    public static void Count(int no)
    {
        if (no >= nMAX)
        {
            for (int i = 0; i < nMAX; i++)
            {
                Console.Write(gcanshu[i, 0]);
                Console.Write(",");
            }
            Console.WriteLine();
            return;
        }

        for (int i = gcanshu[no, 1]; i <= gcanshu[no, 2]; i++)
        {
            gcanshu[no, 0] = i;
            Count(no+1);
        }
    }

    public static void Main()
    {
        Count(0);
        Console.ReadKey();
    }

热点排行