我有的数据:
我查营养成分,得到 成分a:  10g    成分b: 20g  成分c: 15g,即我需要a:10g,b:20g c:15g才能满足我今天的营养需求。
我呢选择了这次吃的食物:比如:黄瓜,西红柿,鸡蛋,米饭
营养含量表:黄瓜: 西红柿   鸡蛋   米饭
         a   0.1    1.5     0.9     5.36
         b   0.2    2.8     1.6     7.9
         c   1.2    4.5     2.6     2.8
如:黄瓜含成分a,0.1g,营养含量表可添加字段。
求:我需要黄瓜,西红柿,鸡蛋,米饭各多少克,才能满足我的营养需求。应该让我
吃好,吃饱。

解决方案 »

  1.   

    a = X1 + X2 + ... + Xn
    b = X1 + X2 + ... + Xn
    c = X1 + X2 + ... + XnX1,X2....Xn分别对应黄瓜、西红柿...米饭
      

  2.   

    dim i as integer  '黄瓜
    dim j as integer  '西红柿
    dim k as integer  '鸡蛋
    dim m as integer  '米饭
    for i = 1 to 100 do
      for j =1 to 100 do
        for k =1 to 100 do
          for m =1 to 100 do
              if i*0.1+j*1.5+k*0.9+m*5.36 = 10 then
                  if i*0.2+j*2.8+k*1.6+m*7.9=20 then
                     if i*1.2+j*4.5+k*2.6+m*2.8 then
                         msgbox(........)
                         goto findit
                      endif
                   endif
                endif
            next m
         next k
       next j
    next i
    findit :
     msgbox(cstr(i)+","+cstr(j)+","+cstr(k)+","+cstr(m))
      

  3.   

    if i*1.2+j*4.5+k*2.6+m*2.8 then
    这句应该改改吧:
    if i*1.2+j*4.5+k*2.6+m*2.8=15 then
      

  4.   

    营养含量表: 黄瓜  西红柿   鸡蛋   米饭
                 (1)  (2)   (3)   (4)  ----指定列数据以方便列出方程的下标
             a   0.1    1.5     0.9     5.36
             b   0.2    2.8     1.6     7.9
             c   1.2    4.5     2.6     2.8各自所求质量  m1     m2      m3      m4   ----未知数
    则列方程组:
            a1*m1 + a2*m2 +a3*m3 + a4*m4 =10 (= ma)  ----F1
            b1*m1 + b2*m2 +b3*m3 + b4*m4 =20 (= mb)  ----F2
            c1*m1 + c2*m2 +c3*m3 + c4*m4 =10 (= mc)  ----F3
    线性方程组里:四个未知数,三个方程,无解!!!!!!!不过有个限定条件: m1>0 (对 其他四个未知数一样),但还是有 XXX 个解
    所以还需要一个方程: 如这顿营养总质量(或者预计总质量)
              m1  +    m2 +   m3   +  m4 = 100 (mTotal) ----F4联立F1~F4方程用 《线性代数》进行求解!所以一定要注意方程是否有解才是关键!
      

  5.   

    楼上各位说的好,但是各位是否考虑到精度和算法效率的问题啊,如果精度不高,方程组会没有解,如果精度高了,请各位想以下是不是效率很低啊。
    所以用几个 for 循环来解决这个问题是一种穷举的方法,当数值复杂或数值在增加时很会影响效率的,我试了,简直是无法忍受的。
    我想还是采用解方程组的方法。
    可以先把一个变量用 for 循环的方式将其置为可知数,然后在解剩下的方程组。