Aller au contenu

algo pour créer une liste


Sujets conseillés

Posté

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

Posté (modifié)

Bienvenu sur le Hub laby.

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

Je pense avoir saisi le truc, après pour l'algo...faut y réfléchir ;)

Modifié par Country
Posté (modifié)

Voici le code que j'ai pondu :

<?
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: , 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." :lol:

Modifié par Country
Posté

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: 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.

Posté (modifié)

oula, jusqu'a 32 !

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

(J'ai compri que le nombre de collone = nombre de départ, je ne sais pas si c'est toujours le cas)

Modifié par Country
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...