// game1: N players, a randomly selected player gives 1 unit to another // CO904, Ellak Somfai #define N 1000 #include #include #define MIN(x,y) ((x)<(y) ? (x) : (y)) int a[N]; int main(int argc, char **argv) { int n_iter; int i, j; // read command line arguments if (argc == 2) { sscanf(argv[1], "%d", &n_iter); } else { printf("Usage: game1 \n"); exit(1); } // initialise random number generator srand48(123123); // initialise state for (j = 0; j < N; j++) { a[j] = 10; } for (i = 0; i < n_iter; i++) { int j1, j2, exchange; // choose j1: integer from {0, 1, ..., N-1} j1 = (int)(drand48() * N); // choose j2: integer from {0, 1, ..., N-1} j2 = (int)(drand48() * N); // now choose exchange: exchange = 1; //exchange = (int)(drand48() * MIN(a[j1]+1, a[j2]+1)); //exchange = (int)(drand48() * (a[j1]+1)); if (a[j1] - exchange < 0) { continue; } a[j1] -= exchange; a[j2] += exchange; } for (j = 0; j < N; j++) { printf("%d\n", a[j]); } return 0; }