<?php
set_time_limit(0);
$somme_a_trouver = 114;
$nb_element_max = 5;
$all_numero = array(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);
function super_unique($array) {
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
return $result;
}
function trouve($all_numero,$somme,$nb_max){
// suppose que cela ne sert qu'a titre de debug/information et que tu aurais pu prendre n'importe qu'elle chiffre du nb d'element max.
if ($nb_max == 4){
static $test;
$test++;
echo "$test/".count($all_numero)."\n";
}
// suppose que c'est pour eviter de faire lancer la machine alors que l'on peut calculer bien plus facilement pour un seul nombre.
if ($nb_max == 1){
if (in_array($somme,$all_numero)){
return array(array($somme));
return true;
} else {
return array();
}
}
$r = false;
$solution = array();
foreach($all_numero as $numero){
// on va parcourir tous nos chiffres 40 > 39 > 38 ..
$trouve = trouve($all_numero,$somme-$numero,$nb_max-1) ; // j'avoue ne pas comprendre la subtilité de ce passage.. tu fais a chaque tout 150-40, 150-39, etc.. et 5-1, comprends rien ;-)
foreach ($trouve as $i => $s){
$trouve[$i][] = $numero;
sort($trouve[$i]);
$solution[] = $trouve[$i];
}
}
// tu serialize pour avoir un string en comparaison je suppose, pas bete du tout.
$solution = super_unique($solution);
return $solution;
}
// ici rien de compliqué..
$result = trouve($all_numero,$somme_a_trouver,$nb_element_max);
echo '<pre>';
print_r($result);
echo '</pre>';
Merci de ton aide et de ta patience.. je suppose que le secret dans la réalisation des algos, c'est.. pratiquer, pratiquer et pratiquer ?