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