Answer R10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* Puzzle R10 -- generate random doubles in the range
| 0 < = r < 100. Print the first one that is within
| epsilon of 50.0, and print how many trials it took
| to reach it.
*/
double randDoubleRange( double min, double max )
{
return (max-min)*(rand()/(RAND_MAX+1.0)) + min;
}
const int limit = 10000000 ;
const double MIN=0.0, MAX= 100.0;
const double TARGET=50.0;
const double EPSILON= 1.0e-3;
int main(int argc, char *argv[])
{
int j=0 ;
double r ;
srand( time(NULL) );
printf("Target: %lf; Epsilon: %9.7lf\n", TARGET, EPSILON );
r = randDoubleRange( MIN, MAX ) ;
while ( fabs( r-TARGET ) >= EPSILON && j<limit )
{
r = randDoubleRange( MIN, MAX ) ;
j++ ;
}
if ( j != limit )
printf("Closest value: %18.15lf; occurred on trial: %d\n", r, j );
else
printf("No number within the limit in %d trials\n", limit );
return 0;
}