数学问题

一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。已知驴一次性可驮1000根胡萝卜,但每走一公里又要吃掉一根胡萝卜。问:商人最多可卖出多少胡萝卜?

注意那个“最”,要有证明的。
·

先驼1000根萝卜前进x1公里放下1000-2*x1根后带走剩下的x1根返回;

然后驼1000根萝卜前进,至x1公里处取x1根萝卜,让驴子恰好驼1000根萝卜;继续前进至距起点x2公里处,放下1000-2*(x2-x1)根萝卜再返回,到x1公里处恰好把萝卜吃完,再取x1根萝卜返回起点;

最后驼走一千根萝卜,行至x1、x2处依次取走所有萝卜,再行至终点。

x1、x2处剩余的萝卜分别小于等于x1和(x2-x1),在这个不等式约束条件下,求得两处剩余萝卜的最大值即可,因为实际上两处剩余的萝卜个数就是最终能够到达终点的萝卜个数。最后求的x1=200,x2=1600/3。驴走过的总路程是2*x1+2*x2+1000=2466+2/3,按题意是走完一公里才吃一根萝卜,也就是吃掉的萝卜总数为里程数向下取整,为2466,所以最终剩下能卖掉的萝卜是3000-2466=534根了。

下面是用程序算出的结果
程序说明:

无论去返都消耗,以消耗最大来看!当运输3000时要往、返共计5倍路程,所以最初1000根消耗完应该在200公里处(最后一次往返也是有用的,如果吃的必须是1000以内的萝卜);由此变为运输2000,往、返共计3倍路程,第二个1000根消耗在533公里处(严格此时此处有1001根来说是消耗了999根,最后一根这里不要了;这要看吃萝卜的限定了,结果可能差一根);最后1000根萝卜从533公里处出发,因而最后剩533根萝卜,呵呵用程序求解其实多少有点浪费。

#include <iostream.h>
#include <math.h>

int main()
{
int i = 0; //循环变量
int s = 1000; //总里程
int n = 3000; //总萝卜数
for(i = 0; i < s; i++)
{
//计算要分几次搬运,是下取整。
int x = (int)ceil((double)n/1000);
//如果回去搬萝卜的代价比搬过来的萝卜数量大,说明没价值,不要返回去搬,扔了。
if(n % 1000 != 0 && n % 1000 <= x)
{
x -= 1;
}
//如果要回去多次搬运,则往返路程要计算好。两次搬运要走三次路。
if(x == 2)
{
x += 1;
}
//如果要回去多次搬运,则往返路程要计算好。三次搬运要走五次路。一次搬运当然就一次路就OK了。
else if(x == 3)
{
x += 2;
}
//让驴吃掉的萝卜。
n -= x;
}
cout << "商人最多可卖出的胡萝卜数量为:" << n << endl;

return 0;
}

得出结果:

商人最多可卖出的胡萝卜数量为:534
Press any key to continue
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-01
其实这个过程可以简化成三个阶段,第一个阶段是全部运到200米处,然后运到终点。。
我们设第一次运的距离是x(x<500),此时剩在此地的胡萝卜是1000-2x,第二次运的距离是y,且设y<=x(只是为了第三次运时,能停下来把第二次剩下的一起带走,其实带走第一次剩下的也是一样的,只是为了方便所以假设y《=x),y《500,然后剩在此处的胡萝卜数是1000-2y;
第三次运到y处时剩余数量是1000-y,加上第二次的是2000-3y》1000,但是此时只能带走1000的。第二次的地与第一次相距(x-y),下面要讨论了:
1.当2000-3y-1000》2(x-y)时,第三处的总数量是3000-4x+y;
2.当2000-3y《2(x-y)时,骆驼就不会返回第二处去驼剩在那地的胡萝卜了,所以此时第三处的胡萝卜数量是2000-3x+y;
下面开始第三次运送:当总数量是3000-4x时,又因为3000-4x》1000,所以要两次才能运完,下面又要开始讨论:
1.当3000-4x+y-1000《2(1000-x)时,剩余量是1000-(1000-x)=x,此时可以解得x的最大值
2.当3000-4x+y-1000>2(1000-x)时,剩余量是1000-2x+y;
3.当2000-3x+y<2(1000-x)时,剩余量是1000-(1000-x)=x;
4.当2000-3x+y》2(1000—x),剩余量是y-x;
经过面四个讨论出来得到的结果的整数就是533,用线性规划求解,x,y《500,y《=x;是约束条件;不能再证明了,这个题本来有些都是需要用文字才能说清楚的。。。。 第一次当然是走到200公里。来回3次,放下2000根。第二次走到553+1/3公里处,放下334根,带上333根往回走。回到200公里时,驴子吃完这333根,但是它还多走了2/3公里,不过不到1公里是不需要喂的。这是再拿上剩下的1000根,走到553+1/3公里处时吃了333 根,同时多走了2/3公里,这时再往前走1/6公里,回来也是1/6公里,凑满1公里,吃掉1根。然后再拿上上次放下的334根,凑满1000根。最后带着这1000根从533+1/3公里往外走,剩下的路程是466+2/3公里,不过只需要吃466根就好了,到了如果驴子要是敢多要萝卜就卸磨杀驴。驴也不会在乎多走了2/3公里。所以剩下534根。本题其实是做一个整数游戏,重点就是这个“整数思维强迫症”。(这句话是错的,那驴还在乎那根了,一共只剩533根,唉...)
第2个回答  2012-04-01
首先分析此题是比较愉快的,不能用常规思维去做的。。。运筹最优化,数学建模研究的
我们应该想到当驴进入沙漠一段时间后,是可以放下胡萝卜倒回来去驼另外一部分,并且根据实际来说那头驴返回时,是需要吃胡萝卜的
每走半公里放下返回一次,那样就能做到走一公里只需要一根胡萝卜,最后就剩1000根了。。
忘采纳啊,希望能帮助你。。。。

谢谢了追问

这种思考的方法很好。
只是驴子一次只能托1000根,这样不可避免的要回到出发点,那么路程就大于2000了,所以胡萝卜也就有2000根以上被吃掉了。

现在的问题是,如何使它走的路程最短?

追答

我被我那个朋友的悖论给迷糊了,走1公里要5根,楼上那个533是正确的,其实你可以设走x公里时,剩余胡萝卜数是2000,然后设y公里时,剩余是1000,因为不管怎么样,胡萝卜不能浪费,全部要吃完和带走,因为胡萝卜数2000和1000是个分界点,驼的次数不同,所以要讨论。。

追问

恩,不过这仍然只是方案,并没有证明

我可以把悬赏分换成RMB的

追答

好吧
其实这个过程可以简化成三个阶段,第一个阶段是全部运到200米处,然后运到终点。。
我们设第一次运的距离是x(x2(1000-x)时,剩余量是1000-2x+y;
3.当2000-3x+y<2(1000-x)时,剩余量是1000-(1000-x)=x;
4.当2000-3x+y》2(1000—x),剩余量是y-x;
经过面四个讨论出来得到的结果的整数就是533,用线性规划求解,x,y《500,y《=x;是约束条件;不能再证明了,这个题本来有些都是需要用文字才能说清楚的。。。。
有些东西本来就是不用证明的,就像你在用1+1=2时,难道你还要去证明么??只要我们解出来就可以了。。。。现在一般的题都只是需要去解吧。。。

本回答被提问者采纳
第3个回答  2012-04-02
此题纯粹为奥数例题,跟“商人杀不杀驴、赚钱几率多少以及驴吃胡萝卜而商人吃什么”根本无关,无非出题人举例罢了,如果你把胡萝卜换成香蕉、驴换成马、商人换成唐僧、出卖换成进贡,同样雷型!

三、此题解题关键是解题人必须领会“驴一次最多可驮1000根胡萝卜(或香蕉等其他什么),而我们必须让它充分发挥体力劳动”。

有朋友的孩子做过类似例题,但他一直有疑问:为什么驴必须驮1000根,而不是500根或1500根?经过解释,他对于不能驮1500根终于有了认识,但对于不能驮小于1000根的解释他始终觉得不满意;而且他询问数学老师,得到的答案是“答案让你这么做,你就该这么做”,更是让家长伤透脑筋。

对于我们来说,此种条件下,驴驮1000根才能发挥最大效益是常识,或者说理所当然的事,但是怎么样在理论上表述呢?确实是个不小的难题(除非一个一个验算)。

四、对于“驴一次最多可驮1000根胡萝卜”,本人通过计算,发现当某一分割点剩余量为n1000±1时,是可以接受的。下面我将1001的处理体会介绍一下:

类似3-2-1题型(不包括A点已经为999的情形),基本确定B点为533公里或多一点点以后,只要符合0≤{1-(B-533)×2}≤1,B点可以在此范围内任意分割,即533≤B≤533.5公里,等于0(即533.5公里)是最有说服力的分割点;除此以外的分割都属于同一类型分割法,有无穷多种,结果是都有零头需要抛弃,当然答案都正确,大家通过验算可以证明。以上解释只基于驴是“边走边吃”的前提,不包括驴“走一公里,然后吃一根胡萝卜”情形。

抛弃处理,似乎并不令人信服,但综合考虑,抛弃并不违背解题原则。

不过,作为奥数解题,做成这么复杂是很不现实的,它最终求的是过程严谨、简单,答案正确。所以我个人最后观点,认为“边走边吃”前提下,B点分割为533.5公里最恰当,容易被同学们更快地理解。

五、还有一个疑问:不管胡萝卜(等)起点总数是多少,我们在途中的分割点都是遵循“胡萝卜剩余量为…5000-4000-3000-2000-1000-终点根数x”的规律,即每一个分割点比前一个分割点都减少1000根,而为什么不是减少2000根呢(因为有人这么解题,当然答案是错误的)?

如此算来,如果起点总数为3000根(单位),则最终答案为400根(单位),显然不是最大值。

原因何在?如果按照 3-2-1-X计算,从3000变到1000时,前进路程为533.5公里(单位),如果按照3-1-X计算,从3000变到1000时,前进路程为400公里(单位),显然单位路程中后者比前者消耗能量更多,当然不是最佳解题途径。

再举个例子,起点总数以5000计,按照5-4-3-2-1-X计算,从5000变到3000时,前进路程为254公里(单位),如果按照5-3-2-1-X计算,从5000变到3000时,前进路程为222.5公里(单位),效率同前。
第4个回答  2012-04-04
要卖出最多胡萝卜,也就是驴的共走过的路程要最短

第一步,当胡萝卜数大于2000时,路程必须来回三趟,第三趟不用回去,共走路程X,消耗胡萝卜1000根,X=1000/5,也就是走200公里,放下1000-(200*2)=600根,第二次1000-(200*2)=600根,第三次1000-200=800根,走了200公里,刚好共运到2000根

第二步,胡萝卜数大于1000时,路程必须来回二趟,第二趟不用回去,共走路程y,消耗胡萝卜1000根,1000/3不是整数,而胡萝卜必须整根搬运

第一种方法,y=333公里,留一根在路上,即在剩下的路程(1000-200-333=467),共有1000根胡萝卜,能运到1000-467=533根

第二种方法,y=334公里,即在剩下的路程(1000-200-334=466),共有998根胡萝卜,能运到998-466=532根

所以,最多可以运到533根