登录站点

用户名

密码

一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。

4已有 20705 次阅读  2010-10-27 22:13   标签商人  胡萝卜  沙漠 

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

1、用数学法可以分析出要走的路分为1段,3段,和5段。

其中

5段的最大值 = 最大负载的1/5 = 1000/5=200;

3段的最大值 = 最大负载的1/3= 1000/3 =1000/3;

1段的值=1000-5段最大值-3段的最大值=1000-200-1000/3 =1400/3;

==》最后的萝卜数 = 3000 -(5段值×5+3段值×3+1段值)

          =  3000 -(1000+1000+1400/3)=1600/3=533又2/3≈534;

 

2、用程序求解

 分别求每走1米所能卖出的胡萝卜,直到1000米。(注:修改其中参数,可以求得在不同条件下的最后解)。

或者应用递归求解Coustmin(n)=Coust(n-1)+Coustmin(1);

贴出代码如下。

#include <iostream.h>  
#include <math.h>  
 
int main()  
{  
    int i = 0; //循环变量  
    int s = 1000; //总里程  
    int n = 3000; //总萝卜数 
    int carry=1000;//驴子能背最多萝卜数
 int coust=1;//每背一米驴子消耗的萝卜数
 int tempcoust=0;
    for(i = 0; i < s; i++)  
    {  
        //计算要分几次搬运,是上取整。  
        int x = (int)ceil((double)n/carry); 
  tempcoust=(2*x-1)*coust;
        //如果回去搬萝卜的代价比搬过来的萝卜数量大,说明没价值,不要返回去搬,扔了。  
        if(n % carry != 0 && n % carry < tempcoust)  
        {  
            x -= 1;  
        }  
       tempcoust=(2*x-1)*coust; //往返路程为搬运次数2倍-1
        //让驴吃掉的萝卜。  
        n -= tempcoust;  
    }  
    cout << "商人最多可卖出的胡萝卜数量为:" << n << endl;  
 
    return 0;  

 

分享 举报

发表评论 评论 (2 个评论)