Version complète: sur le forum Webmaster Hub : algo pour créer une liste
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
laby
Bonjour
Je voudrais créer une liste qui ressemble à celle-là, et je voudrais de l'aide pour trouver un algorithme. apparemment c simple mais je n'y arrive pas.
Le nombre de colonnes du tableau est différent, et le premier nombre peut changer.


5 0 0 0 0
4 1 0 0 0
4 0 1 0 0
4 0 0 1 0
4 0 0 0 1
3 2 0 0 0
3 1 1 0 0
3 1 0 1 0
3 1 0 0 1
3 0 2 0 0
3 0 1 1 0
3 0 1 0 1
3 0 0 2 0
3 0 0 1 1
3 0 0 0 2
2 3 0 0 0
2 2 1 0 0
2 2 0 1 0
2 2 0 0 1
2 1 2 0 0
2 1 1 1 0
2 1 1 0 1
2 1 0 2 0
2 1 0 1 1
2 1 0 0 2
2 0 3 0 0
2 0 2 1 0
2 0 2 0 1
2 0 1 2 0
2 0 1 1 1
2 0 1 0 2
2 0 0 3 0
2 0 0 2 1
2 0 0 1 2
2 0 0 0 3
1 4 0 0 0
1 3 1 0 0
1 3 0 1 0
1 3 0 0 1
1 2 2 0 0
1 2 1 1 0
1 2 1 0 1
1 2 0 2 0
1 2 0 1 1
1 2 0 0 2
1 1 3 0 0
1 1 2 1 0
1 1 2 0 1
1 1 1 2 0
1 1 1 1 1
1 1 1 0 2
1 1 0 3 0
1 1 0 2 1
1 1 0 1 2
1 1 0 0 3
1 0 4 0 0
1 0 3 1 0
1 0 3 0 1
1 0 2 2 0
1 0 2 1 1
1 0 2 0 2
1 0 1 3 0
1 0 1 2 1
1 0 1 1 2
1 0 1 0 3
1 0 0 4 0
1 0 0 3 1
1 0 0 2 2
1 0 0 1 3
1 0 0 0 4
0 5 0 0 0
0 4 1 0 0
0 4 0 1 0
0 4 0 0 1
0 3 2 0 0
0 3 1 1 0
0 3 1 0 1
0 3 0 2 0
0 3 0 1 1
0 3 0 0 2
0 2 3 0 0
0 2 2 1 0
0 2 2 0 1
0 2 1 2 0
0 2 1 1 1
0 2 1 0 2
0 2 0 3 0
0 2 0 2 1
0 2 0 1 2
0 2 0 0 3
0 1 4 0 0
0 1 3 1 0
0 1 3 0 1
0 1 2 2 0
0 1 2 1 1
0 1 2 0 2
0 1 1 3 0
0 1 1 2 1
0 1 1 1 2
0 1 1 0 3
0 1 0 4 0
0 1 0 3 1
0 1 0 2 2
0 1 0 1 3
0 1 0 0 4
0 0 5 0 0
0 0 4 1 0
0 0 4 0 1
0 0 3 2 0
0 0 3 1 1
0 0 3 0 2
0 0 2 3 0
0 0 2 2 1
0 0 2 1 2
0 0 2 0 3
0 0 1 4 0
0 0 1 3 1
0 0 1 2 2
0 0 1 1 3
0 0 1 0 4
0 0 0 5 0
0 0 0 4 1
0 0 0 3 2
0 0 0 2 3
0 0 0 1 4
0 0 0 0 5
Country
Bienvenu sur le Hub laby.

Hoooo c'est un joli casse-tête ! wacko.gif

Je pense avoir saisi le truc, après pour l'algo...faut y réfléchir wink.gif
Country
Voici le code que j'ai pondu :

CODE
<?
function zero($nb,$long) {
    while (strlen($nb)<$long) {
 $nb = "0".$nb;
    }
    return $nb;
}

$num = 5; // Nombre de départ (+ il est grand + c'est long)
$nb = "";
$tab = array($num);
for($i=0;$i<$num;$i++) {
    if ($i>0) $tab[$i]=0;
    $nb .= $tab[$i];
}
while ($nb>=$num) {
    $somme = 0;
    for($i=0;$i<$num;$i++) {
 $nbt[$i] = substr($nb,$i,1);
 $somme +=$nbt[$i];
    }
    if ($somme==$num) echo zero($nb,$num)."<br>";
    $nb--;
}

?>


Bon, j'ai fait sa asser vite alors soyez indulgent whistling.gif , on peut pas dire que ce soit très rapide comme méthode...

Comme le dis si bien mon prof de prog : "On bon programme c'est un programme qui marche." laugh.gif
laby
Merci pour l'idée, :up:
Je vais l'essayer et l'adapter à mon programme.
J'ai déjà essayé avec une fonction récursive mais ça me prend beaucoup de temps whistling.gif quand le premier nombre atteint les 17 ou 18 alors que j'en ai besoin jusqu'à 32.
En fait je travaille en java, mais bof l'algorithme ne change pas.
En tout cas merci encore pour le tuyau.
Country
oula, jusqu'a 32 !

Déjà avec ce que j'ai fait à 6 sa a du mal... huh.gif

(J'ai compri que le nombre de collone = nombre de départ, je ne sais pas si c'est toujours le cas)
laby
Non, nombre de colonne n'est pas toujours égale à nombre de départ, c'était une coincidence. Je voulais seulement rédiger une liste jusqu'à la fin, et j'ai simplifié. En réalité le nombre de colonne est de 20, et le premier nombre peut varier de 1 à 32.
Si l'algo marche, je peux l'adapter pour diviser la liste à créer en deux, et de ce fait les 32 peuvent être réduits en 16, n'empêche c'est pas encore trop petit.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.