Avec N plaques,
on teste au préalable si une plaque n'est pas le résultat
cherché...
sinon si N>1
on cherche tous les
couples de plaques possibles:
par exemple avec (1,
2, 3, 4) on a ( 1 2, 1 3, 1 4, 2 3, 2 4, 3 4)
à tous ces couples on applique les 4 opérations
pour chaque opération on obtient une nouvelle plaque + les N-2 restantes, on relance la procédure avec ces N-1 plaques,
c'est beaucoup plus simple.... Il faut un dictionnaire (par exemple) dés lors on balaye ce dictionnaire et on teste si chaque mot est inclus dans le tirage... si oui c'est une solution....on triera ensuite les solutions sur leur longueur pour avoir la plus longue Par exemple en Delphi, avec un dictionnaire chargé dans MemoDico: procedure TFrmLMLPL.BtnChercheClick(Sender: TObject); var i: Integer; tirage, mot: str25; begin MemoSolutions.Clear; tirage := EditTirage.Text; for i := 0 to MemoDico.Lines.Count - 1 do Begin mot := MemoDico.Lines.Strings[i]; if inclus(mot, tirage) then MemoSolutions.Lines.add(mot+' '+IntToStr(length(mot))); end; TriSurLaLongueur(MemoSolutions); end; trop facile !... Une possibilté pour inclus s1 dans s2: function inclus(s1, s2: str25): boolean; var i, p: Integer; r: boolean; begin if (length(s1)>length(s2)) then result:=false else begin r := true; for i := 1 to length(s1) do begin p := Pos(s1[i], s2, 1); if p > 0 then s2[p] := ' ' else begin r := False; break; end; end; result := r end; end; Sources et exécutables |