A pile of nuts is in an oasis, across a desert from a town. The pile contains ‘N’ kg of nuts, and the town is ‘D’ kilometers away from the pile.

The goal of this problem is to write a program that will compute ‘X’, the maximum amount of nuts that can be transported to the town.

The nuts are transported by a horse drawn cart that is initially next to the pile of nuts. The cart can carry at most ‘C’ kilograms of nuts at any one time. The horse uses the nuts that it is carrying as fuel. It consumes ‘F’ kilograms of nuts per kilometer traveled regardless of how much weight it is carrying in the cart. The horse can load and unload the cart without using up any nuts.

Your program should have a function that takes as input 4 real numbers D,N,F,C and returns one real number: ‘X’:

IDEA:1. X is a monotonic increasing function of N. A little increasing of N could increase X.

2. The distance to travel is a problem. It should be the minimum of the distance to the destination and the distance consume of enough nuts such that the next round we could travel 1 less round.

C++:

01 double maxNut(double N, double D, double C, double F)

02 {

03 double t=C;

04

05 if(N<=C){

06 if(F*D>=N)

07 return 0.0;

08 else

09 return N–F*D;

10 }

11 int k=ceil(N/C);

12

13 double consumperkilometer=F*(2*k–1);

14 double remain=k*C–C;

15 double distancetotravel=(N–remain)/consumperkilometer;

16

17 if(distancetotravel<D)

18 return maxNut(remain,D–distancetotravel,C,F);

19 else

20 return N–F*(2*k–1)*D;

21 }

### Like this:

Like Loading...

*Related*