• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

qwerty

Rodar números entre si

10 mensagens neste tópico

Boa noite.

A minha dúvida é como faço para que tenha todas as combinações com os digitos de um número, ou seja, por exemplo, o número 345 as combinações são 345,435,543,535,...

Eu tive a pensar numa forma, mas é de facto nuito lento.

Eu sei que devo trabalhar sob a forma de strings.

Ty

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim de repente só me estou a lembrar de uma coisa.

combinacoes = []

for i in "345":
for k in "345":
	for l in "345":
		combinacoes.append(i+k+l)
		combinacoes.append(i+l+k)
		combinacoes.append(i+k+k)
		combinacoes.append(i+l+l)
		combinacoes.append(k+i+l)
		combinacoes.append(k+i+k)
		combinacoes.append(l+i+k)
		combinacoes.append(l+i+l)
		combinacoes.append(k+l+i)
		combinacoes.append(k+k+i)
		combinacoes.append(l+k+i)
		combinacoes.append(l+l+i)

Vais é ficar com números repetidos, depois tens que os remover.

as_verdadeiras = []

for i in combinacoes:
if i not in as_verdadeiras:
	as_verdadeiras.append(i)


print as_verdadeiras
['333', '334', '343', '344', '433', '434', '443', '335', '353', '355', '533', '535', '553', '345', '354', '435', '534', '453', '543', '444', '455', '545', '554', '445', '454', '544', '555']

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres TODAS as combinações possíveis, incluindo as repetidas? Ou queres só tipo:

123 -> 123, 132, 213, 231, 321, 312

?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que esse código até pode ficar mais "bonito" dando uso a listas por compreensão em vez dos ciclos encadeados.

... pelo menos em Haskell, mas penso que em Python também seja, visto o sistema ser muito parecido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, exactamente por isso é que eu perguntei se era para ter repetidos ou não. Se não fosse, era usar listas e ir "prendendo" número a número e rodando os outros, até se ter de novo o inicial. Caso contrário, não vejo outra solução sem ser a do rolando..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi. Acho que é indiferente se aceitam-se repetidos ou não. Em ambos os casos dá para fazer por funções recursivas ou por listas por compreensão. Porque aliás, nas listas por compreensão, internamente o seu funcionamento é à base de recursividade...

Edit: Adicionei uma entrada na wiki com a transcrição em Haskell com o uso de listas por compreensão. Se alguém tiver interessado em passar para Python está a vontade...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que eu estava a dizer era a solução ali do Djthyrax. Eu tinha pensado exactamente numa solução semelhante, só que não contempla os casos repetidos: 111, 112, 113 (para o 123 por exemplo) ....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que eu estava a dizer era a solução ali do Djthyrax. Eu tinha pensado exactamente numa solução semelhante, só que não contempla os casos repetidos: 111, 112, 113 (para o 123 por exemplo) ....

É assim nao há repeticao de digitos no mesmo numero.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora