salut,
j'essaye de coder un programme qui prend comme données :
- la taille d'une chaîne de caractères.
- la chaîne de caractères.
- la taille des mots à générer à partir de cette chaîne.
exemple :
4
bimp
2
le programme doit afficher :
12
bi
bm
bp
ib
im
ip
mb
mi
mp
pb
pi
pm
12 : est le nombre de mots générer.

j'ai codé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void BruteForce (int Nbre);
 
int TailleMot = 0;
int TailleMotGenerer;
int TailleChaineSource;
char *ChaineSource = NULL;
char *Mot = NULL;
 
int main(void) {
  int Total = 1;
  int Compteur;
 
  fscanf(stdin,"%d",&TailleChaineSource);
  ChaineSource = (char*)malloc(TailleChaineSource+1);
  fscanf(stdin,"%s",ChaineSource);
 
  fscanf(stdin,"%d",&TailleMotGenerer);
  Mot = (char*)malloc(TailleMotGenerer+1);
  for (Compteur = 0;Compteur <TailleMotGenerer;Compteur++)
    Total *= TailleChaineSource;
 
  fprintf(stdout,"%d\n",Total);
  BruteForce(TailleMotGenerer);
 
  free(Mot);
  free(ChaineSource);
 
  return 0;
}
 
 
 
void BruteForce (int Nbre) {
  int ParcouLettre;
  if (Nbre == 0 ) {
    Mot[TailleMot] = 0;
    fprintf(stdout,"%s\n",Mot);
    return;
  }
  for (ParcouLettre=0;ParcouLettre<TailleChaineSource;ParcouLettre++) {
    if (strrchr(Mot,ChaineSource[ParcouLettre]) == NULL) {
      Mot[TailleMot] = ChaineSource[ParcouLettre];
      TailleMot++;
      BruteForce(Nbre-1);
      TailleMot--;
    }
  }
}
sauf que le code affiche :
16
bi
bm
bp
ib
im
ip
mb
mi
mp
il affiche 16 au lieu de 12 (j'ai pas su trouvé la formule exacte pour afficher le nombre de mots où les lettres ne se répètent pas, on ne demande pas d'utiliser les calculs combinatoires).
Et il manque :
pb
pi
pm
j'arrive pas la résoudre.
merci.