33#define MAX_LONGUEUR 100
51 for (
int i = 0; i <
N + 1; i++) {
53 char *mot = (i <
N) ? mots[i] : totalStr;
54 for (
int j = 0; j < strlen(mot); j++) {
55 int index = strchr(lettres, mot[j]) - lettres;
56 valeurs[i] = valeurs[i] * 10 + chiffres[index];
61 for (
int i = 0; i <
N; i++) {
65 return (somme == valeurs[
N]);
82 if (index == nb_lettres) {
84 for (
int i = 0; i < nb_lettres; i++) {
85 printf(
"%c %d\n", lettres[i], chiffres[i]);
91 for (
int i = 0; i < 10; i++) {
93 int est_premiere_lettre = 0;
94 for (
int j = 0; j <
N + 1; j++) {
95 char *mot = (j <
N) ? mots[j] : totalStr;
96 if (lettres[index] == mot[0]) {
97 est_premiere_lettre = 1;
102 if (est_premiere_lettre && i == 0)
107 permuter(chiffres, index + 1, utilisé, mots,
N, totalStr, lettres, nb_lettres);
118 for (
int i = 0; i <
N; i++) {
119 scanf(
"%s", mots[i]);
123 scanf(
"%s", totalStr);
126 for (
int i = 0; i <
N + 1; i++) {
127 char *mot = (i <
N) ? mots[i] : totalStr;
128 for (
int j = 0; j < strlen(mot); j++) {
129 if (!strchr(lettres, mot[j])) {
130 int len = strlen(lettres);
131 lettres[len] = mot[j];
132 lettres[len + 1] =
'\0';
138 int nb_lettres = strlen(lettres);
139 qsort(lettres, nb_lettres,
sizeof(
char), (
int (*)(
const void *,
const void *)) strcmp);
143 permuter(chiffres, 0, utilisé, mots,
N, totalStr, lettres, nb_lettres);
void permuter(int chiffres[], int index, int utilisé[], char mots[MAX_MOTS][MAX_LONGUEUR], int N, char totalStr[MAX_LONGUEUR], char lettres[], int nb_lettres)
génère les permutations des chiffres
int verifier_solution(char mots[MAX_MOTS][MAX_LONGUEUR], int N, char totalStr[MAX_LONGUEUR], int chiffres[], char lettres[], int nb_lettres)
vérifie si la combinaison satisfait l'addition