有配方原料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某成分含量(计算过程就简写为计算即可).
主要是如何写循环。
   配方原料,成分计算

解决方案 »

  1.   

    递归更容易理解吧假设用一个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;
    }
      

  2.   

     只能是递归    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();
        }