【每日一题20220909】有趣数字游戏

:woman_mage: 有些数字具有有趣的特性。例如:

89 → 8¹ + 9² = 89 * 1

695 → 6² + 9³ + 5⁴= 1390 = 695 * 2

46288 → 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51

给定一个正整数 n,写成 abcd…(a, b, c, d… 是数字)和一个正整数 p

  • 我们想要找到一个正整数 k,如果它存在的话,使得 n 的数字之和对 p 的连续幂等于 k ​​ n。

换句话说:

是否存在整数 k 例如: (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + …) = n * k

如果是这种情况,我们将返回 k,如果不是,则返回 -1。

注意 :n 和 p 将始终作为严格的正整数给出。

dig_pow(89, 1) 返回值 1 因为 8¹ + 9² = 89 = 89 * 1
dig_pow(92, 1) 返回值 -1 因为 9¹ + 2²=13 无法整除92
dig_pow(695, 2) 返回值 2 因为 6² + 9³ + 5⁴= 1390 = 695 * 2
dig_pow(46288, 3) 返回值 51 因为 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51

题目难度:较易
题目来源:Playing with digits | Codewars

def dig_pow(n: int, p:int) -> int:
    # your code
assert dig_pow(89, 1) == 1
assert dig_pow(92, 1) == -1
assert dig_pow(46288, 3) == 51
assert dig_pow(2646798, 1) == 1
assert dig_pow(3456789, 1) == -1
assert dig_pow(63761, 3) == 1
assert dig_pow(132921, 3) == 4
assert dig_pow(10383, 6) == 12933
def dig_pow(n: int, p: int) -> int:
    sum = 0
    for i in str(n):
        sum += pow(int(i), p)
        p = p + 1
    if sum % n == 0:
        return sum // n
    else:
        return -1
def dig_pow(n: int, p:int) -> int:
    sum=0
    for i in str(n):
        sum+=pow(int(i),p)
        p+=1
    return sum/n if sum%n==0  else -1
assert dig_pow(89, 1) == 1
assert dig_pow(92, 1) == -1
assert dig_pow(46288, 3) == 51
assert dig_pow(2646798, 1) == 1
assert dig_pow(3456789, 1) == -1
assert dig_pow(63761, 3) == 1
assert dig_pow(132921, 3) == 4
assert dig_pow(10383, 6) == 12933
关闭