一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。已知驴一次性可驮1000根胡萝卜,但每走
31个回答
展开全部
卖完胡萝卜,驴还要返回1000公里,路上就不吃胡萝卜了吗?两种可能,要么饿死,要么把商人吃了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接找3头驴,驮过去以后直接卖驴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
驴会吃胡萝卜?吃胡萝卜会不会噎死?在沙漠里会不会热死?渴死?那商人肿么办,喂进去的萝卜肿么办、、、、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答者: smxxskw 正解!
C++解法:
#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;
}
C++解法:
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分四部分计算
因为每次只能运1000根,所以从3000到两千的过程要返回两次,也就是要消耗5根
然后可以走200米,还剩2000根
再从2000少到1000的过程每次要返回一次,所以每次要消耗3根
但是需要是3的倍数,又要卖最多所以取999
最后就还剩1001根,这次可以走333米
再走一米,但是先吃一根萝卜再走,就还剩1000根了,走的路就是200+333+1=534
最后一步就是背1000根走1000-534米,也就是还剩534根了。
主要思路是要想到最后要剩1000根,因为它每次最多背那么多,所以要想吃的最少最后要剩1000的样子才能保证吃得最少,再就要想到需要返回的次数,哪个阶段返回几次,这样很容易就想到要分段计算了
因为每次只能运1000根,所以从3000到两千的过程要返回两次,也就是要消耗5根
然后可以走200米,还剩2000根
再从2000少到1000的过程每次要返回一次,所以每次要消耗3根
但是需要是3的倍数,又要卖最多所以取999
最后就还剩1001根,这次可以走333米
再走一米,但是先吃一根萝卜再走,就还剩1000根了,走的路就是200+333+1=534
最后一步就是背1000根走1000-534米,也就是还剩534根了。
主要思路是要想到最后要剩1000根,因为它每次最多背那么多,所以要想吃的最少最后要剩1000的样子才能保证吃得最少,再就要想到需要返回的次数,哪个阶段返回几次,这样很容易就想到要分段计算了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询