我有的数据:
我查营养成分,得到 成分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,营养含量表可添加字段。
求:我需要黄瓜,西红柿,鸡蛋,米饭各多少克,才能满足我的营养需求。应该让我
吃好,吃饱。
我查营养成分,得到 成分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,营养含量表可添加字段。
求:我需要黄瓜,西红柿,鸡蛋,米饭各多少克,才能满足我的营养需求。应该让我
吃好,吃饱。
b = X1 + X2 + ... + Xn
c = X1 + X2 + ... + XnX1,X2....Xn分别对应黄瓜、西红柿...米饭
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))
这句应该改改吧:
if i*1.2+j*4.5+k*2.6+m*2.8=15 then
(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方程用 《线性代数》进行求解!所以一定要注意方程是否有解才是关键!
所以用几个 for 循环来解决这个问题是一种穷举的方法,当数值复杂或数值在增加时很会影响效率的,我试了,简直是无法忍受的。
我想还是采用解方程组的方法。
可以先把一个变量用 for 循环的方式将其置为可知数,然后在解剩下的方程组。