Ir para conteúdo
  • Cadastre-se

dev botao

permutações possíveis de um numero ou palavra


  • Este tópico foi criado há 453 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia no delphi 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;

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Consultores
Em 18/01/2023 at 12:12, luanemile disse:

Bom dia no delphi 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;

Acredito que não tenha nada pronto. Mas isso me parece combinações e permutações simples.

Não deve ser muito difícil encontrar na internet ou desenvolver.

O problema é que parece muito com um exercício de dever de casa... :(

Pode dar mais informações sobre o contexto?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 453 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.