#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,k,success;
int nTrials = 100000, nSucc = 0,l;
int * p;
/* Read in the number k */
printf ("Enter k:");
scanf ("%d", &k);
printf ("\nYou entered k = %d \n", k);
if ( k < 2)
{
printf (" select a k >= 2 please. \n");
return 1;
}
/* Allocate memory for our purposes */
p = (int *) malloc(k * sizeof(int));
//nTrials = number of times to repeat the experiment.
for (j = 0; j < nTrials; ++j)
{
success = 0;
// Each experiment will generate k random variables
// and check if the difference between
// any two of the generated variables is exactly 42.
// The loop below folds both in.
for (i = 0; i < k; ++i){
// Generate the random numbers between 1 and 1000
p[i] = 1+ (int) ( 1000.0 * (double) rand() / (double) RAND_MAX );
// Check if a difference of 42 has been achieved already
for (l = 0; l < i; ++l)
if (p[l] - p[i] == 42 || p[i] - p[l] == 42 )
{
success = 1; // Success: we found a diff of 42
break;
}
}
if (success == 1)
{
// We track the number of successes so far.
nSucc ++;
}
}
// Probability is simply estimated by number of success/ number of trials.
printf ("Est. probability is %f \n", (double) nSucc/ (double) nTrials);
// Do not forget to cleanup the memory.
free(p);
return 1;
}