新手练习100题

Python挑战100题(34~36)

2019-08-16  本文已影响0人  YoYoYoo

34、汉诺塔

题目:
在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

现在请你计算出起始有n个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?
输入
每组测试数据是一个整数n,表示起始时金片的个数。(0<n<=100)
输出
输出把金片起始针上全部移动到另外一个针上需要移动的最少步数。
参考答案:

def f(n):
    if n==1:
        return 1
    else:
        return 2*f(n-1)+1

print(f(n))

35、回文素数

题目:
回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。给你一个正整数n(1 <= n <= 100), 请你输出从小到大排列的的第n个回文素数。

例如:
n = 1, 则输出 2
n = 5, 则输出 11
参考答案:

def isPrime(n):  # 先判断一个数是否是素数
    if n <= 1:
        return False
    i =2
    while i*i <= n:
        if n % i == 0:
            return False
        i += 1

    return True
L = [2]
for i in range(2,100000):
    if i % 2 and str(i) == str(i)[::-1]: # 这里i % 2 == 1
        if isPrime(i):
            L.append(i)

n=5
print(L[n-1])

36、反素数

题目:
反素数(逆向拼写的素数)是指一个将其逆向拼写后也是一个素数的非回文数。例如:17和71都是素数,所以,17和71都是反素数。

给你一个正整数n(1 <= n <= 100), 请你输出从小到大排列的的第n个反素数。

例如:
n = 1, 则输出 13
n = 5, 则输出 71
参考答案(新手):

def isPrime(n):  # 先判断一个数是否是素数
    if n <= 1:
        return False
    i =2
    while i*i <= n:
        if n % i == 0:
            return False
        i += 1

    return True

L = []
for i in range(10,100):
    if i % 2==1:
        if isPrime(i):
            L.append(i)
N = []
for j in L:
    for f in L:
        if str(j) != str(f) and str(j) == str(f)[::-1]:
            N.append(j)

n=1
print(N[n-1])
上一篇下一篇

猜你喜欢

热点阅读