Pergunta: Imprima todos os "números de narciso".O chamado "número de narciso" refere-se a um número de três dígitos cuja soma do cubo é igual ao número.
em si. Por exemplo: 153 é um “número de narciso” porque 153 = 1 ao cubo + 5 ao cubo + 3 ao cubo.
Método 1: método de exaustão brutal
Idéia: comece com 100, enumere cada número de três dígitos por vez e, em seguida, encontre a soma do cubo de cada dígito do número para determinar se o número é igual à soma do cubo.
Vantagens: A ideia é simples, fácil de entender e implementar.
Desvantagens: A complexidade do tempo é alta e todos os números de três dígitos precisam ser enumerados, portanto a eficiência é baixa.
O código é implementado da seguinte forma:
for num in range(100, 1000):
temp = num
sum = 0
while temp:
digit = temp % 10
sum += digit ** 3
temp //= 10
if sum == num:
print(num)
Método 2: Otimizando o método exaustivo
Ideia: Você pode adicionar algumas operações de poda ao processo exaustivo. Por exemplo, você só pode calcular os números cuja soma seja o valor especificado, o que pode reduzir cálculos desnecessários.
Vantagens: Melhor eficiência até certo ponto.
Desvantagem: Ainda é necessário enumerar todos os três dígitos.
O código é implementado da seguinte forma:
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
num = i * 100 + j * 10 + k
if num == i ** 3 + j ** 3 + k ** 3:
print(num)
Método 3: Método de fórmula matemática
Idéia: De acordo com a definição de número de narciso, podemos obter uma fórmula de três dígitos para a soma dos cubos de cada dígito, ou seja, num = i 3 + j 3 + k**3. De acordo com esta fórmula, você pode determinar rapidamente se um número é um número narciso.
Vantagens: Não há necessidade de enumerar todos os números de três dígitos e o julgamento é feito diretamente com base na fórmula, o que é mais eficiente.
Desvantagens: É difícil pensar e pensar na fórmula.
O código é implementado da seguinte forma:
for num in range(100, 1000):
i = num // 100
j = num // 10 % 10
k = num % 10
if num == i**3 + j**3 + k**3:
print(num)
Resumindo, o método da fórmula matemática é a solução ideal, mas requer uma certa compreensão e domínio das fórmulas matemáticas. Embora o método exaustivo de força bruta seja simples e fácil de entender, é menos eficiente.A otimização do método exaustivo melhora a eficiência até certo ponto, mas ainda precisa enumerar todos os números de três dígitos.