Combinaisons de 4 chiffres

Fermé
Ninotchka - 15 déc. 2014 à 15:32
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 - 17 déc. 2014 à 21:24
Bonjour,

Pourriez vous m'aider à écrire la fonction showPINs suivante :

"Compléter le programme PIN avec une fonction showPINs qui prend en paramètre un tableau de 4 entiers (dans l'ordre croissant) et qui affiche tous les codes PINs avec exactement ces quatre chiffres (tous les chiffres sont supposés distincts), dans l'ordre croissant (un code PIN par ligne).
exemple : pour le tableau { 0 , 5 , 7 , 8 }, la fonction affichera :
0578
0587
0758
.
.
.
8750"

Je bloque dessus alors que c'est un exo de niveau moyen, je sais qu'il faut utiliser des boucles imbriquées (deux "for") ainsi qu'une conditionnelle dans la boucle ("if").

Merci d'avance !!



2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
15 déc. 2014 à 16:35
http://www.laissemoichercherca.com/?q=Combinaison%20algorithme
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 2
17 déc. 2014 à 21:24
Salut,
Et ben ta question, ben c'est pas du gâteau !!! Tu parles de 2 boucles ... mon oeil!!! et pis l'aide de Whismeril (merci à lui), quand on regarde le code de son link ... . Bon j'ai voulu m'amuser en Delphi (sorry), tu convertiras.
J'ai trouvé 2 solutions, si y a mieux en algo je suis preneur.
1- autant de boucles qu'il y a de car, avec une réservation des car que tu prends. pas bien car le code est figé au nb de car.

2 une fonction qui appelle une proc récursive, avec réservation (#0), toutes longueurs. Donc en Delphi ça fait çà (facile d'en faire du java):

var LesCombi : string; // résultat;

procedure combi ( pPin, pChoix: string; niv, lng: integer);
var i : integer;
begin
for i := 1 to lng do
if pChoix[i]<> #0 then // si pas pris
begin
pPin[niv] := pChoix[i]; // on le prend
pChoix[i] := #0; // on l'enleve du choix
if niv=lng then // si dernier car on prend
LesCombi := LesCombi + pPin + CRLF
else // sinon on relance sur car suivant
Combi (pPin, pChoix, niv+1, lng);
pChoix[i] := pPin[niv]; // on le remet dans le choix
end;
end;

function Combinaisons( pPin : string ) : string;
begin
LesCombi := '';
combi( pPin, pPin, 1, length(pPin)); // appel 1er niveau
result := LesCombi;
end;

Mais çà boucle lng ^ lng fois, c'est pas performant.
Qui à mieux ?
Voilà.
solilog
-1