Tout d'abord, un tableau de 16 char pour représenter ton nombre à 16 chiffres
char nombre[] = {1,0,0,0,1,1,2,2,2,3,3,3,4,4,4,5}; // le nombre de départ
Ensuite un tableau de 10 char pour représenter les chiffres utilisés
char chiffres[] = {3,3,3,3,3,1,0,0,0,0};
(il y a trois 0, trois 1, ...)
Ensuite, pour parcourir les solutions, rien de plus simple que d'incrémenter ton nombre!
1 2 3 4 5
| //code très naif, ne pas utiliser
void incrementer(char *nombre, char *chiffres, size_t pos)
{
nombre[pos]++; //augmente le chiffre, par exemple de 7 à 8...
} |
Mais après tu dois vérifier que si ton chiffre passe de 9 à 10, tu le fais passer de 9 à 0, et augmenter celui de la dizaine supérieure:
1 2 3 4 5 6 7 8 9
| //code très naif, ne pas utiliser
void incrementer(char *nombre, char *chiffres, size_t pos)
{
if (++nombre[pos] == 10) //s'il y a une retenue
{
nombre[pos] = 0;
incrementer(nombre, chiffres, pos-1); // on augmente la dizaine supérieure
}
} |
Mais après, tu dois vérifier certaines conditions avec chiffres (que nombre[pos] n'ait pas sa case dans chiffres à 3, ...), tu dois tenir à jour un compteur, et une fois que tu auras fini, tu pourras même peut-être trouver des simplifications qui vont augmenter la vitesse de l'algorithme.
Peut être que ce serait bien de commencer avec moins de chiffres que 16.
Bonne chance!
Partager