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