/* Program to make randomized charitable donations. */ /* Puts N objects in M piles based on Bernoulli trials */ /* Written by Carey Williamson for CPSC 601.08 Feb/10 */ #include #include #include #define MAX_RAND 0x7fffffff #define MAX_PILES 2 /* Optional debugging flag */ /* #define DEBUG 1 */ int main(argc, argv) int argc; char **argv; { int i, j, pile, numpiles, numobjects, objects[MAX_PILES]; float randnum; numpiles = MAX_PILES; if( numpiles < 1 ) { printf("Number of piles must be a positive integer!\n"); exit(-1); } if( numpiles > MAX_PILES ) { printf("Number of piles is too large for me!\n"); exit(-1); } srandom(time(0)); while( (i = scanf("%d", &numobjects)) == 1 ) { #ifdef DEBUG printf("Splitting %d objects into %d piles at random...\n", numobjects, numpiles); #endif /* initialize clear new piles */ for( i = 0; i < numpiles; i++ ) { objects[i] = 0; } /* put each object randomly into one of the piles */ for( j = 0; j < numobjects; j++ ) { randnum = (float) random()/MAX_RAND; pile = randnum * numpiles; objects[pile]++; #ifdef DEBUG printf("Putting object %d in pile %d since rand is %8.6f\n", j, pile, randnum); #endif } /* Print out results */ for( i = 0; i < numpiles; i++ ) { printf("%d ", objects[i]); } printf("\n"); } }