Python :: Aufgabe #345

2 Lösungen Lösungen öffentlich

Zahl ist Summe von Potenzwerten zur Basis 3

Anfänger - Python von JKooP - 18.04.2021 um 12:49 Uhr
Gegeben ist eine Integer-Zahl im Bereich von 1 bis 1.000.000.
Es soll geprüft werden, ob sich diese Zahl als Summe von Potenzwerten
zur Basis 3 darstellen lässt. Die Reihenfolge der Exponenten ist unerheblich.

Beispiele:
n = 12
Lösung: wahr => 12 = 3^1 + 3^2

n = 91
Lösung: Wahr => 3^0 + 3^2 + 3^4

n = 105
Lösung: Falsch

Erstelle eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false zurückgibt.

Viel Spaß

Lösungen:

vote_ok
von eisheiliger (3750 Punkte) - 19.04.2021 um 17:36 Uhr
Quellcode ausblenden Python-Code

"""
#345: Zahl ist Summe von Potenzwerten zur Basis 3
Gegeben ist eine Integer-Zahl im Bereich von 1 bis 1.000.000. Es soll geprüft werden, ob sich diese Zahl als Summe von
Potenzwerten zur Basis 3 darstellen lässt.
"""


def prf_pot3(n):
    pot = int(round(n ** (1 / 3.), 0))
    print("n =", n, "ist")

    for i in range(pot + 1):
        if (n - 3 ** pot) >= 0:
            n -= 3 ** pot
        pot -= 1

    if n == 0:
        print("wahr")
    else:
        print("falsch")


def main():
    prf_pot3(12)
    prf_pot3(91)
    prf_pot3(105)
    prf_pot3(4782969)
    prf_pot3(4782968)


if __name__ == '__main__':
    main()


vote_ok
von AlexGroeg (2010 Punkte) - 06.05.2021 um 15:27 Uhr
Quellcode ausblenden Python-Code

import math


def ist_basis_3(n):
    a = math.log(n, 3);  rest = (a *100 %100) /100
    p = a - rest 
    print('3^{}'.format(int(p)), end=' ')
    n = n - 3**(int(p))
    if n > 0:
        print('+', end = ' ')
        ist_basis_3(n)
    
    return True


beispiele = [12, 91, 105, 1000000]

for n in beispiele:
    print('\nn=',n)
    print('\tLösung:',ist_basis_3(n))