请各位大侠出手!
假设人体需要:蛋白质 50g 脂肪 30g 淡水化合物 60g
选择的食物有:牛奶(含 蛋白质 2g/每100克 碳水化合物 3g/每100克)
肉 (含 蛋白质 2g/每100克 碳水化合物 3g/每100克 脂肪 5g/每100克)
水果(含 蛋白质 4g/每100克 碳水化合物 6/每100克 脂肪 2g/每100克)
问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要
假设人体需要:蛋白质 50g 脂肪 30g 淡水化合物 60g
选择的食物有:牛奶(含 蛋白质 2g/每100克 碳水化合物 3g/每100克)
肉 (含 蛋白质 2g/每100克 碳水化合物 3g/每100克 脂肪 5g/每100克)
水果(含 蛋白质 4g/每100克 碳水化合物 6/每100克 脂肪 2g/每100克)
问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要
解决方案 »
- 简单的算法如何做才方便
- 生蛋节快到了,送大家首歌,happy一下哈
- 大家有没有作过"健身房管理系统"?能提供相关资料吗?~
- 讨论:BDE ,ADO,dbExpress,InterBase Express(IBX)
- ERP软件上的编辑窗体和查询窗体是否要分开来做?还是可以合并在同一个窗体界面上处理?
- use一个单元,在implement前后有什么区别
- 在线等待,菜单事件?请高手指点。
- 有朋友提到DBGirdEh控件,请问这个东东在什么地方,怎么我的delphi6中没有呢?
- 请问在Delphi中如何用代码实现将多次Query得到的查询结果添加到一个数据表中?
- ActiveForm的问题。救命啊,解决不了这个问题我就要失业了。
- DBGrid2中显示DBGrid1中符合某条件的字段值,通过Button1的click触发,求教。。。
- twebbrowser问题..
选择的食物有:牛奶(含 蛋白质 2g/每100克 碳水化合物 3g/每100克)
肉 (含 蛋白质 2g/每100克 碳水化合物 3g/每100克 脂肪 5g/每100克)
水果(含 蛋白质 4g/每100克 碳水化合物 6/每100克 脂肪 2g/每100克)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g
问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要,且花的生活费最省。
Min F(X) = 1.5X1 + 2X2 + 1.8X3
2X1 + 2X2 + 4X3 ≥ 50
3X1 + 3X2 + 6X3 ≥ 60
5X2 + 2X3 ≥ 60
X1 ≥ 0
X2 ≥ 0
X3 ≥ 0
设牛奶为X1,肉为X2,水果为X3
Min F(X) = 1.5X1 + 2X2 + 1.8X3
2X1 + 2X2 + 4X3 ≥ 50
3X1 + 3X2 + 6X3 ≥ 60
5X2 + 2X3 ≥ 30
X1 ≥ 0
X2 ≥ 0
X3 ≥ 0
是的,这个满足是最低需求。请教您的算法。
const Nxi = 50; // 需要的蛋白质, 脂肪, 淡水化合物
Nxj = 30;
Nxk = 60;
var i, j, k : integer; //蛋白质, 脂肪, 淡水化合物
x1, x2, x3 : integer; // 牛奶,肉,水果
minx1, minx2, minx3: integer; //最少的牛奶,肉,水果
v, min : real;// 价钱、最低价钱
begin
min :=1000.0; //初始化,设大一点值,确保第一次V能赋值给min
minx1 := 0;
minx2 := 0;
minx3 := 0;
for x1 := 0 to 25 do
for x2 := 0 to 25 do
for x3 := 0 to 15 do
begin
i := x1 * 2 + x2 * 2 + x3 * 4; //求出蛋白质
j := x2 * 5 + x3 * 2; //求出脂肪
k := x1 * 3 + x2 * 3 + x3 * 6; //求出淡水化合物
if (i >= Nxi) and (j >= Nxj) and (k >= Nxk) then //达到需要的营养
begin
v := 1.5 * X1 + 2 * X2 + 1.8 * X3; //求价钱
if v<min then //找到低于最低价钱的价钱
begin
min := v; //保存最小值
minx1 := x1;
minx2 := x2;
minx3 := x3;
end;
end;
end;
ShowMessage(Format('牛奶%d 肉%d 水果%d 价钱%f',[minx1, minx2, minx3, min]));
end;
谢谢您给的提示,看了您程序,您用的是穷举法,可以解决目前的问题,而且速度也很快,但是,如果有更复杂的情况,比如营养素超过20种,食物超过10种甚至更多,这个算法的效率可能就要打问号了?请教您,也请教其他的高手大侠更高的算法。不知哪位大侠有心得于对偶单纯性算法,请您出手相助!
http://www.2ccc.com/article.asp?articleid=2365运筹学的不好
请问用什么样的方法更好一点呢?
那个代码我下载了,用它得到的结果:x1 = 0 , x2 = 1.25 , x3 = 11.875,我的要求是x1, x2, x3 > 0,这个方法不太好
我认真地看了一下自己用的那个对偶单纯型算法,从对偶化后就看不懂了,不知道从哪里下手调整,请赐教
牛奶(含 蛋白质2g 碳水化合物3g)
肉 (含 蛋白质2g 碳水化合物3g 脂肪 5g)
水果(含 蛋白质4g 碳水化合物6g 脂肪 2g)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g
蛋白质 淡水化合物 脂肪
牛奶的价格比:1.5/2, 3/2, 无
肉 的价格比:2/2, 3/2, 5/2
水果的价格比:4/1.8, 6/1.8, 2/1.8人体最大需求是淡水化合物,淡水化合物价格比最小的是水果
所以一次把淡水化合物买够,60,买10,淡水化合物OK
人体能量有40蛋白质,60淡水化合物,20脂肪
差10, ,差10
脂肪只能在肉中含有,所有只能买肉2个,脂肪OK
人体能量有44蛋白质,60淡水化合物,30脂肪
最后发现蛋白质还是不够,差6,价格币种,最小的是水果,所以买水果2个
最后注意,牛奶比水果便宜,我们差6个蛋白质,1个水果为4,1个为2
所以,买一个水果,一个牛奶
得出:牛奶1,肉2,水果11口算都能算出结果,不过要求不断的考虑临界点(二个价格比高的(买多了,浪费),
但买一个便宜的(价格比不高)和一个价格比好的也能满足要求)
这种方式可以考虑一下,实现很简单,我就不写代码了
看过你的分析,发现我提出的问题有漏洞,没有考虑到人体所需蛋白质、脂肪、淡水化合物的摄入量有一定的范围,超过这个范围后就会带来不良的后果,暂定其范围为90%-110%之间,即蛋白质的有效范围为:50*0.9 = 45 到 50*0.11 = 55 之间,脂肪的有效范围为:27 到 33 之间,淡水化合物的有效范围为:54 到 66 之间;
用你的办法得出的结果:蛋白质的总量为 50,脂肪的总量为:35,淡水化合物的总量为:75,满足了蛋白质的需求,但是脂肪和淡水化合物超出了有效范围,有可能给身体带来不良的后果。在此
题目改为:假设人体需要:蛋白质 45g至55g 脂肪 27g至33g 淡水化合物 54g-66g
选择的食物有:牛奶(含 蛋白质 2g/每100克 碳水化合物 3g/每100克)
肉 (含 蛋白质 2g/每100克 碳水化合物 3g/每100克 脂肪 5g/每100克)
水果(含 蛋白质 4g/每100克 碳水化合物 6/每100克 脂肪 2g/每100克)牛奶价格1.5元/100g,肉价格2元/100g,水果1.8元/100g
问:需要分别吃多少牛奶+肉+水果(牛奶、肉、水果都要吃),可以满足人体需要,且花的生活费最省。
牛奶(含 蛋白质2g 碳水化合物3g)蛋白质:碳水化合物 =2:3
肉 (含 蛋白质2g 碳水化合物3g 脂肪 5g) 蛋白质:碳水化合物 =2:3
水果(含 蛋白质4g 碳水化合物6g 脂肪 2g)蛋白质:碳水化合物 =2:3蛋白质最小45;
对应最小碳水化合物为 45*1.5 =67.5
最小都操过了上限
所以天下人不是被充死就是被饿死或者不是肥胖就是营养不良