O problema é assim:
Existe um bloqueio de PIN de 4 dígitos. Os dígitos devem ser escolhidos entre os dígitos 0-5
da chave para desbloquear.
Precisamos encontrar todas as combinações possíveis 0001, 0002, 0003, 0004
, como e assim por diante.
O problema é assim:
Existe um bloqueio de PIN de 4 dígitos. Os dígitos devem ser escolhidos entre os dígitos 0-5
da chave para desbloquear.
Precisamos encontrar todas as combinações possíveis 0001, 0002, 0003, 0004
, como e assim por diante.
Você pode criar uma matriz para os dígitos e incrementar os dígitos anteriores até encontrar um que não seja 9, assim como incrementa números em geral:
Veja como abordar o problema recursivamente.
Precisamos dividir os problemas em subproblemas e encontrar a solução para o menor subproblema que poderíamos resolver.
Isso dá o nosso caso base, ou seja, para
0
dígito pin teremos""
Agora vamos dividir o problema em subproblemas e tentar resolvê-los. Tentamos o primeiro dígito do pino com
0
, então só temos que resolver o problema para os três dígitos restantes. O mesmo acontece se tentarmos o primeiro dígito1
e assim por diante.Então vamos prosseguir com isso
Aqui está a minha abordagem, provavelmente tornei isso mais complicado do que deveria ser. Concentrei-me mais em usar a recursão corretamente (sem variáveis globais e a função retorna o resultado final ou uma chamada para si mesma).
O
for
loop ali é necessário (ou, pelo menos, outra função recursiva) sedigitsCount
puder ser variável.O principal motivador desta abordagem é usar o módulo (
%
) e aflag
variável para fazer a contagemrange
baseada (neste caso, baseada em 5 ).