商人拉驴贩卖萝卜算法【转】

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

 

  题目如题:

 

  一个商人骑一头驴要穿越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

 

  原文来源:http://blog.csdn.net/firstboy0513/article/details/5923680

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值