1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int alea(int n, int p);
void combinaisonAleatoire(int n, int p);
int
main(int argc, char *argv[])
{
int n, p, k = 1, i, j, cnp, *L, *t;
srandom(time(NULL));
if (argc < 3) {
printf("Combinaisons aléatoires\n"
"Sous-ensembles au hasard de p éléments de [1 n]\n"
"usage : %s n p [k]\n", argv[0]);
exit(1);
}
n = atoi(argv[1]);
p = atoi(argv[2]);
if (argc > 3) {
k = atoi(argv[3]);
}
if (n < 0 || p < 0 || p > n || k <= 0)
return 0;
for (i = 0; i < k; i++) {
combinaisonAleatoire(n, p);
printf("\n");
}
return 0;
}
int
alea(n, p)
{
return ((double) n * random() / (RAND_MAX + 1.0) < (double) p) ? 1 : 0;
}
#ifdef RECURSE
void
combinaisonAleatoire(n, p)
{
if (n < p || p < 0) {
return;
} else if (alea(n, p)) {
combinaisonAleatoire(n - 1, p - 1);
if (p > 1) {
printf(" ");
}
printf("%d", n);
} else {
combinaisonAleatoire(n - 1, p);
}
}
#else
void
combinaisonAleatoire(n, p)
{
for (; n >= p && p >= 0; n--) {
if (alea(n, p)) {
printf("%d ", n);
p--;
}
}
}
#endif |
Partager