- 积分
- 32
- 注册时间
- 2004-9-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 shamohu 于 2009-6-17 16:32 编辑
下面两道数学趣味题,求解方法很多,仅演示如何用1stOpt方便求解。
1:甲、乙、丙三人各有糖豆若干粒,甲从乙处取来一些,使自己的糖豆增加了一倍;接着乙从丙处取来一些,使自己的糖豆也增加了一倍;丙再从甲处取来一些,也使自己的糖豆增加了一倍。现在三人的糖豆一样多。如果开始时甲有51粒糖豆,那么乙最开始有多少粒糖豆?
设p1、p2、p3分别代表甲、乙、丙开始时的糖豆数,x1、x2、x3分别代表甲从乙、乙从甲、丙从甲拿取的豆。
Algorithm = DE1;
Constant p1 = 51;
IntParameter x(3)=[0,200], p(2:3)=[1,200];
Function p1+x1=2*p1; //甲从乙处取来一些,使自己的糖豆增加了一倍
p2-x1+x2 =2*(p2-x1); //接着乙从丙处取来一些,使自己的糖豆也增加了一倍;
p3-x2+x3 =2*(p3-x2); //丙再从甲处取来一些,也使自己的糖豆增加了一倍。
2*p1-x3 =2*(p3-x2); //现在三人的糖豆一样多: 甲=丙
2*(p3-x2)=2*(p2-x1); //现在三人的糖豆一样多: 乙=丙
结果:
目标函数值(最小): 0
x1: 51
x2: 34
x3: 34
p2: 85
p3: 68
即:乙和丙开始使有糖豆85和68粒。
2: 一筐苹果,把它们三等分后还剩2个苹果;取出其中两份,将它们三等分后还剩两个;然后再取出其中两份,又将这两份三等分后还剩2个。问:这筐苹果至少有几个?
设苹果数为n,上限为100个。
IntParameter n[0,100];
Function n mod 3 = 2; //把它们三等分后还剩2个苹果
(n div 3)*2 mod 3 =2; //取出其中两份,将它们三等分后还剩两个
((n div 3)*2 div 3)*2 mod 3 =2; //然后再取出其中两份,又将这两份三等分后还剩2个
可得3种结果: 23、50和77. 按问题“这筐苹果至少有几个?”,最后答案为23个。 |
|