Jump to content

ecmlj

Members
  • Posts

    1
  • Joined

  • Last visited

Posts posted by ecmlj

  1. Bom dia no unigui tem alguma função para contar permutações possíveis de um numero ou palavra?
    Tenho essa função mais não está funcionando corretamente,
    Só funciona se os caracteres não se repetirem
    Exemplo :
    Qtda caracteres|combinação com 3 char| combinação com 4 char
    123456=                              120                                       360
    112345=                               72                                        192
    112234=                               42                                         102
    112233=                               24                                          54
    111234=                               34                                          72
    111223=                               19                                          38
    111222=                                 8                                          14

    function CountPermutations02(str: string; r: Integer): Int64;

      function Factorial(n: Integer): Int64;
      var
        I: Integer;
      begin
        Result := 1;
        for I := 2 to n do
          Result := Result * I;
      end;

      function Combination(n, r: Integer): Int64;
      begin
        Result := Factorial(n) div (Factorial(r) * Factorial(n - r));
      end;
    var
      I: Integer;
      count: array of Integer;
      n: Int64;
    begin
      SetLength(count, 256);
      for I := 1 to Length(str) do
        Inc(count[Ord(str[I])]);
      n := 1;
      for I := 0 to 255 do
        if count[I] <> 0 then
          n := n * Factorial(count[I]);
      Result := Combination(Length(str), r) * Factorial(r) div n;
    end;

×
×
  • Create New...