您的位置:首页 > 其它

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

2011-03-24 13:07 447 查看
题目如题:

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

在此用程序的解决,其实不用程序的也很简单:

程序说明:


论去返都消耗,以消耗最大来看!当运输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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐