个人资料

昵称:kebey2008

等级:

日志分类

kebey2008的日志

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

分享 4 18803 次阅读 | 2 个评论 标签商人  胡萝卜  沙漠  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 个评论)



  • xiaohua6388 说:  今天能登录了,心情很欢悦。请大家多多指教!  回复
  • houzi112313140 说:  平凉的冬天,冷的不是身体,而是冰封的心!  回复
  • 19851206 说:  今天刚刚才进行登录,还请大家多多关照啊@@!!!  回复
  • 499210327 说:  夜色很美,但该睡觉了.........................  回复
  • LOVEMZY 说:  大其心,容天下之物,虚其心,爱天下之善,平其心,论天下之事,潜其心,观天下之理,定其心,应天下之变。  回复
  • LOVEMZY 说:  方便面涨价了,鸡蛋涨价了,面粉涨价了,汽油涨价了,羽绒服涨价了…除了工资,身边的一切几乎都涨价了,但是我们依然需要坚强的活下去,因为墓地现在也涨价了…  回复
  • sqmoon 说:  祝有色有声新年快乐!  回复
  • lcylidong 说:  如何激活网站的电子书阅读,从哪里可以得到或者申请到序列号、密码等这些东西?  回复
  • shyone 说:  缘来是你  回复
  • 许晓阳 说:  超爱潘晓婷  回复