现在有几个乘积,a1*n1,a2*n2,a3*n3,............其中a1,a2,a3为材料长度,n1,n2,n3为材料数量,想让在尽可能用完材料数量的情况下拼料,例如a1*(n1-2)+a2*(n2-1)+........,要求和大于5800小于5970,a1和n1不固定,不一定每次都得用上a1,a2,a3。

解决方案 »

  1.   

    for .. to ..
     if ...
      

  2.   

    三个变量
    for .. to ..
      for .. to ..
        for .. to ..
         if sum>5800 and sum < 5870 then ..
      

  3.   

    for(i = n1;i>=0;i--)
      for(j = n2;j >= 0;j--)
       for(k = n3;k >= 0;k--)
         求sum
         if(sum > 5800 && sum < 5970)
            则第一次满足此条件的组合一定是用料最多的如果有很多种材料,那就不能简单的N重循环,要另想方法
      

  4.   

    这是一个循环:从最小的开始选,选完一种要计算SUM,与5800比较。
    1.如果比它小,再循环,即从剩下的材料中再选取最小的。
    2.如果比它大,与5970比较。
      一。如果比它小,则这种材料全选,然后再从剩下的材料中选取最小的。
     二。如果比它大,则用5970-SUM除以这种材料的单位价格,得到这种材料取的长度。跳出循环。最后可以得到一个最优解。
      

  5.   

    多典型的动态规则啊,一个个说写 for 循环的根本就没通用性