Ah oui mais si Astrojojo dit qu’il ne connait pas les pointeurs, je suppose qu’il ne connait pas les structures de données et je suppose donc qu’il n’a pas le droit d’utiliser vector, list… et ces trucs bizarres de boost
Pour ma part j’ai répondu à une part de la question, c’est-à-dire déterminer si il existe une solution dans les sommes possibles, et ceci avec un nombre de variable de sommes.
J’ai fait donc ça sans structure de données, avec une simple récursion. Je me trompe peut-être mais je ne vois pas trop comment pouvoir afficher les éléments composant la somme sans aucune structure de données variable comme un tableau dynamique à la C99, liste, pile…
[code]#include <stdio.h>
#include <stdlib.h>
#define GOAL 15
#define NB_SUM 3
int values[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
void
sum_rec(int nb_sum, int val)
{
int i;
if (nb_sum == 0) {
if (val == GOAL) {
printf(« Une combinaison existe\n »);
exit(0);
}
return;
}
for (i = 0; i < sizeof(values)/sizeof(values[0]); i++) // Pas correct car réutilise plusieurs fois la même valeur
sum_rec(nb_sum - 1, val + values[i]);
}
int
main()
{
int nb_val = NB_SUM;
sum_rec(nb_val, 0);
printf(« Pas de combinaison\n »);
return 0;
}[/code]
Version corrigée :
[code]#include <stdio.h>
#include <stdlib.h>
#define GOAL 15
#define NB_SUM 3
int values[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
void
sum_rec(int nb_sum, int val, int index)
{
int i;
if (nb_sum == 0) {
if (val == GOAL) {
printf(« Une combinaison existe\n »);
exit(0);
}
return;
}
for (i = index; i < sizeof(values)/sizeof(values[0]); i++)
sum_rec(nb_sum - 1, val + values[i], i + 1);
}
int
main()
{
int nb_val = NB_SUM;
sum_rec(nb_val, 0, 0);
printf(« Pas de combinaison\n »);
return 0;
}[/code]