Fonction de calcul du nombre de duel unique pour un nombre n de participant

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 639 fois - Téléchargée 16 fois

Contenu du snippet

Tout est dans le titre :)
C'est simple mais assez utile ;)

J'ai commencé par creer cette fonction qui est trop lourde en calucl :

function nDuel($nombre){

$list = array();
$start = 1;
$val = 0;
if($nombre >= 2){
do{
for($i=$nombre;$i>=$start;$i--){

for($y=$start;$y<=$nombre;$y++){
if(
!in_array("$i/$y",$list)
and !in_array("$y/$i",$list)
and $i != $y
){
$list[] = "$i/$y";
}
}

}
$start ++;
}while($start != $nombre);

$val = count($list);
}

return $val;
}

puis j'ai compris que c'était plus simple :)
Donc Voila !

Source / Exemple :


<?php

function nDuel($nombreDeParticipant){
    $nombreDeDuel = ($nombreDeParticipant * $nombreDeParticipant - $nombreDeParticipant ) / 2;
    return $nombreDeDuel;

}

//exemple

$nombre = 100;
echo nDuel($nombre);

?>

Conclusion :


Bonne prog :)

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
Bonjour,

Si un homme prend tout le monde en duel (quand il meurt, le gagnant prend les autres en duel, bref, ca revient au meme)

t'obtiens n - 1 combat... c'est beaucoup moins qu'avec ta fonction

Si tu parles d'un tableau d'élimination, on obtient a peu pres le meme chiffre (pour N une puissance de deux, ca fonctionne)

Bref, ce que fait ton code n'est pas clair...
lbasic
Messages postés
18
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
23 mai 2011
-
Je pense que l'auteur a utilisé le mot "duel" dans le sens de "1 contre 1 et 1 seule fois"
sa fonction permet de calculer le nombre de "match" ou "partie" uniques entre deux personnes en fonction du nombre de participants.

en clair, le nombre de "partie" pour que tout le monde joue contre tout le monde 1 seule fois.

exemple avec 4 joueurs A,B,C,D

A-B
A-C
A-D
B-C
B-D
C-D

on obtiens 6 "parties".

CQFD
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
ah c'est un tournois de poules...
LeFauve42
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009
-
Oui, ca marche, mais un niveau initié pour une fonction de stats élémentaire vue en troisième ou en seconde...

Note que la formule utilisée n*(n-1) donne toutes les permutations.
Ca veut dire que x1 contre x2 et x2 contre x1 sont deux duels différents.

Si tu veux les "duels" uniques, il faut diviser par le nombre de permutations parmis n éléments, c'est à dire n! (dans ton cas, n=2, n! = 1*2 = 2).

donc, pour le nombre de duels la formule est :
$n*($n-1)/2

Pour ceux que ca interesse, la formule générale (nombre de groupes de m éléments pris parmis n éléments) est :
(n!/(n-m)!)/m! ou si vous préférez : n!/((n-m)!*m!)

Eric

PS: Désolé pour la note mais franchement, entre nous, tu pousses un petit peu, non ? (une multiplication et une soustraction... Initié... :o) )
mtrix000
Messages postés
31
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
1 novembre 2012
-
Bonjour LeFauve42, et les autres...

tous dabord pour ton : $n*($n-1)/2 je pense que tu n'as pas lu entièrement ma fonctio nDuel qui est :

function nDuel($nombreDeParticipant){
$nombreDeDuel = ($nombreDeParticipant * $nombreDeParticipant - $nombreDeParticipant ) / 2;
return $nombreDeDuel;
}

Donc c'est la même chose que ta fonction.

Si j'ai fais cette fonction c'est pour savoir combien il y a de 1 contre 1, avec un grand nombre de participant.

Merci pour le 1 :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.