Renvoi toutes les combinaisons de n booléens et toutes les combinaisons d'une chaine de caractère.
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
Source / Exemple :
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;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
static void afficher(boolean[][] a){
for(int i=0;i<a.length;i++){
for(int j=0;j<a[0].length;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
public static void main(String[]adrien){
afficher(Combinaisons(5));
afficher(Combinaisons("abcd"));
}
}
Conclusion :
Remarques :
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
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.