Buscando um número

4 respostas
C

Olá, será que algum de vocês consegue me ajudar?

Problema: Achar o 12º caso(começando do 1) em que colocando o número da última posição para a primeira posição, será igual ao número original multiplicado por 8/3.

Assim: pegamos o número, exemplo 1234, alterando ficamos com 4123. Seria valido se 1234 * 8/3 = 4123. Logo, 1234 não é válido.

número original * 8/3 = número modificado

O primeiro é 27 (27 * 8/3 = 72)
O segundo é 2727(27278/3 = 7272)
O terceiro é 116883 (116883
3/=311688)

… assim por diante até o décimo segundo 116883116883(116883116883*8/3 = 311688311688)

Obs: não é permitido usar double ou string para transformar o número.


Ok, eu já consegui transformar o número e também percorrer até o 12º. Mas o problema é que o algoritmo não é nada viável, demora horas até encotrar o 12º número.

Alguém tem alguma dica de como fazer essa varredura mais rápido???
Muito Obrigado!

4 Respostas

T

Você pode eliminar os números que são múltiplos de 10 e considerar apenas os múltiplos de 3. Eu sei que os números têm de ser múltiplos de 27, mas não consigo provar ainda por quê.

C

Ou alguém saberia alguma forma de inverter os números sem usar algum tipo de laço? Seria uma boa forma de diminuir o nº de instruções, não?

Obrigado!

T

Para inverter o número é relativamente fácil - mas, como você deve ter descoberto, o problema é você encontrar uma forma de eliminar a maior parte dos números, para testar apenas alguns deles.

É fácil você descobrir que o número não pode terminar por 0, senão inverter o número iria dar um número que é MENOR que o número original.

Como o número invertido tem de ser MAIOR (8/3 = 2,67 vezes maior) que o número original, então você já pode eliminar tais números.

O número tem de ser múltiplo de três, porque você precisa dividi-lo por 3 e multiplicá-lo por 8, para obter o número invertido.

Uma coisa interessante nos números que você passou é que 27 = 3^3, 2727 = 3^3 * 101, 116883 = 3^5 * 13 * 37, e 116883116883 = 3^5 * 13 * 37 * 1000001 (1000001, por sua vez, é 101 * 9901). Ou seja, quando um número tem essa propriedade, esse número * 1000…0001 (onde a quantidade de zeros é suficiente para que o número fique multiplicado e dê um número "repetido": 27 -> 2727, 116883 -> 116883116883.

Mas não consegui achar mais propriedades. Só sei que dá a impressão, embora não possa provar, que esses números sempre são múltiplos de 27; aí você poderia pegar seu algoritmo e deixá-lo 27 vezes mais rápido.

C

Obrigado pelas contribuições!
Realmente,os números são todos multiplos de 27…

O restante dos resultados:

  1. Número original: 27 - Número modificado: 72
  2. Número original: 2727 - Número modificado: 72
  3. Número original: 116883 - Número modificado: 311688
  4. Número original: 155844 - Número modificado: 415584
  5. Número original: 194805 - Número modificado: 519480
  6. Número original: 233766 - Número modificado: 623376
  7. Número original: 272727 - Número modificado: 727272
  8. Número original: 311688 - Número modificado: 831168
  9. Número original: 350649 - Número modificado: 935064
  10. Número original: 27272727 - Número modificado: 72727272
  11. Número original: [telefone removido] - Número modificado: [telefone removido]
  12. Número original: 116883116883 - Número modificado: 311688311688

Se alguém descobrir mais alguma particularidade ou alguma forma de me ajudar, por favor!!

Obrigado!

Criado 15 de abril de 2009
Ultima resposta 17 de abr. de 2009
Respostas 4
Participantes 2