Combinaison des entiers

cs_ghada Messages postés 2 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 30 août 2004 - 30 août 2004 à 11:14
adrientaieb Messages postés 4 Date d'inscription dimanche 4 avril 2004 Statut Membre Dernière intervention 1 mars 2006 - 11 févr. 2005 à 13:51
J'aime bien avoir un algorithme qui permet de générer toutes les combinaisons d'une liste d'entiers c'est à dire 2^n avec n le nombre d'entiers de la liste. par exemple pour 1,2,3 je génére 1,2,3,12,13,23

21 réponses

adrientaieb Messages postés 4 Date d'inscription dimanche 4 avril 2004 Statut Membre Dernière intervention 1 mars 2006
11 févr. 2005 à 13:51
Arrétez de vous battre j'ai la réponse en Java :

Algorythme :
Utilise le fait que les combinaisons d'un octets (en binaire évidemment) sont les chiffres en base 10 de 0 à 255

Code :
Deux fonctions : une qui travaille sur des booléens et une sur des chaînes de caractère.
+des fonctions d'affichage et de test

class combinaisons{
//renvoi toutes les combinaisons de t booléens
static boolean[][]Combinaisons(int t){//t=taille de la chaine
boolean[][]comb=new boolean[(int)Math.pow(2,t)][t];
for(int i=0;i<comb.length;i++){
int a=i;
for(int j=comb[0].length-1;j>=0;j--){
if(a%2==1){
comb[i][j]=true;
a=(int)(a/2);
}
else{
a/=2;
}
}
}
return comb;
}

//renvoi toutes les combinaisons d'une chaine de caractère
static char[][] Combinaisons(String mot){
int longueur=mot.length();
int nbr=(int)Math.pow(2,longueur);//nbr=nombre de combinaisons
char[][] comb=new char[nbr][longueur];
int k=0;
for(int i=0;i<nbr;i++){
k=i;
for(int j=longueur-1;j>=0;j--){
if(k%2==0){
k/=2;
}
else{
comb[i][j]=mot.charAt(j);
k/=2;
}
}
}
return comb;
}
static void afficher(char[][] a){
for(int i=0;iRemarques :</gras>
Remplacez les tableaux par des listes si vous ne voulez pas de blanc dans les combinaisons.
Ne dépassez pas la capacité du type primitif utilisé !!!
* ne marche pas pour les mots de plus de n lettres :
* n tq : 2^n=capacité du type
* pour les byte n=1*8=8
* pour les short n=2*8=16
* pour les int : n=4*8=32
* pour les long : n=8*8=64

Signature :
Le danseur de Java qui fume des Caml
0
Rejoignez-nous