Dénombrement: nombre de boucle

Signaler
Messages postés
3
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
14 mai 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour à tous,

Je suis nouveau sur ce forum j'espère que je respecter les rêgles(en fait je ne sais pas si je suis dans la bonne section).

Voici mon problème:

Vous avez n personnes. Dans un panier (c'est plus champêtre que l'urne de nos livres de maths) se trouvent les noms de chacune de ces n personnes.

Chaque personne tire au hasard le nom d'un autre personne. Il ne peut pas se choisir lui même.

Ma question est la suivante:
Quelle est le nombre le plus probable de boucle pour n personnes.

J'appele boucle la situation suivante:

Michel tire le nom "Jacques".
Jacques tombe sur "Hubert".
Hubert tombe sur "Jennifer".
Jennifer tombe sur Michel.
La boucle est bouclée.

J'ai fait une essai avec ma famille. Nous étions 31 nous sommes tombé sur quatres boucles.

En gros, voilà ce que je cherche. Je ne vois vraiment pas comment résoudre ce problème d'une manière théorique. j'imagine qu'il faut utiliser les combinaisons.
Je me suis dis que je pouvais résoudre l'affaire en utilisant le c en programmant un grand nombre de tirage. Le problème c'est que je ne vois pas comment programmer la notion de boucle.

Merci de votre aide.
A vous lire.

Pierebean

<!-- / message -->
<!-- edit note -->

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
#define NBR 31


int *prs; // Tableau des personnes
int i, j, v;


prs = (int*) malloc(NBR * sizeof(int));
if(!prs) return;
srand(GetTickCount());
i = 0;
nextNBR:
  v = rand() % NBR;
  if(v == i) goto nextNBR; // INTERDIT SOI MEME
  // VERIF NON DEJA PRIS  for(j 0; j < i; j++) if(prs[j] v) goto nextNBR;
 
prs[i] = v;
  if(++i < NBR) goto nextNBR;


Affichage et free(prs);

ciao...
BruNews, MVP VC++
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
3
Bonjour,


Pour utilser des boucles dans un programme il y a deux méthodes :
- le for : qui effectue un nombre de boucle précis
- le while : qui effectue autant de boucle qu'il faut afin que la condition soit validée

Pour plus d'informations à propos de ces "fonctions" voir : http://c.developpez.com/cours/bernard-cassagne/node33.php







<hr />
J'espère avoir été utile.









Nico
/U>
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
3
Oups je me suis trompé, désolé, il y a plus de deux méthodes.
Il existe aussi le do.

<hr />
Nico/U>
Messages postés
3
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
14 mai 2009

réponse à BruNews:


->Est-ce que je peux faire un scanf pour NBR à la place de le metre dans un define?


->Mon emacs (sur Linus fedora core) ne connait pas "GetTickCount()"
(déclaration implicite). Y a t-il une alternative? à quoi sert cette
fonction?


->Qu'est ce qui est sous entendu par "Affichage" dans "Affichage et free(prs);" un printf sur quoi?


Merci


Pierebean
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Tu récup NBR comme tu l'entends.
Ton Linux ne sait pas requeter sur google ? Si oui, tu verrais que GetTickCount() est API Windows, tu remplaceras par time(NULL) ou truc de ce genre.
"Affichage" ne sous-entend rien, le mot est sans ambiguité, tu affiches où tu veux si tu le veux.

ciao...
BruNews, MVP VC++