python clássico 100 perguntas sobre o número de narcisos

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.

Acho que você gosta

Origin blog.csdn.net/yechuanhui/article/details/132870747
Recomendado
Clasificación