美文网首页
Python挑战100题(37~40)

Python挑战100题(37~40)

作者: YoYoYoo | 来源:发表于2019-08-28 09:38 被阅读0次

37、回文数 Ⅰ

题目:若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
现在给你一个正整数M(12 <= M <= 100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。
例如:M=87,则输出4.
参考答案:

M = 87
i = 0
while i <= 8:
    if str(M) == str(M)[::-1]:
        print(i)
        break
    else:
        M = M + int(str(M)[::-1])
        i += 1

if i == 9:
    print(0)

38、回文数 Ⅱ

题目:又是回文数!但这次有所不同了。
给定一个N进制正整数,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。
如果N超过10,使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。
例如:10进制87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
给你一个正整数N(2<=N<=16)和字符串M("1"<=M<="30000"(10进制)),表示M是N进制数,输出最少经过几步可以得到回文数。
如果在30步以内(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。
如N=10, M="87", 则输出4.注意:M是以字符串的形式给定的。
参考答案:

def s(a,n):     # 10进制数a变为n进制数(string)

    d = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
    a,b = int(a),''
    while a > 0:
        if a % n < 10:
            b += str(a % n)
        else:
            b += d[a % n]
        a = a // n
    return b[::-1]

def f(a,n): # n 进制数变a为10进制数(int)

    d = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
    a,b = str(a),0
    a = a[::-1]
    for i in range(len(a)):
        if a[i] not in 'ABCDEF':
            b += int(a[i])*n**i
        else:
            b += d[a[i]]*n**i
    return b

def h(m,n):

    step = 0
    while str(m) != str(m)[::-1]:
        m = f(m,n) + f(str(m)[::-1],n)
        m = s(m,n)
        step += 1
        if step > 30:
            return 0
            break
    return step

M,N = 87,10
print(h(M,N))

39、最小路径和

题目:给你一个由非负整数组成的矩阵M,请你找到一条从矩阵左上角到右下角的路径,使其和最小,并输出最小路径的和(注意:每次只能向右走或者向下走)。
例如:
M = [[1, 2, 3],
[1, 2, 3],
[1, 3, 3]]
则输出:9
说明:最小路径上的值分别为(1->1->1->3->3)。
提示:动态规划,还没了解
其他参考答案:(难以想出)

M = [[1, 2, 3],
     [1, 2, 3],
     [1, 3, 3]]
L = M
s = len(L) # 行数
t = len(L[0]) # 列数

for i in range(s):
    for j in range(t):
        if i == 0 and j != 0:
            L[i][j] += L[i][j-1] # 算出向右行驶的距离
        if j == 0 and i != 0:
            L[i][j] += L[i-1][j] # 算出向下走的距离
        if i != 0 and j != 0:
            L[i][j] += min(L[i-1][j],L[i][j-1]) # 从后向前推,取最小

print(L[s-1][t-1])

40、欧拉函数1

题目:欧拉函数的定义是:对于n,Eurla(n)为与n互质的小于n的正整数的个数。
给定n(n<=1000),输出Eurla(n)
欧拉函数参考:https://blog.csdn.net/liuzibujian/article/details/81086324
参考代码:

def yinzi(n):
    yz = []
    for i in range(1,n+1):
        if n % i == 0:
            yz.append(i)
    return (yz)
n = 12
y0 = yinzi(n) # 求出n的所有因子
s = 0
for i in range(1,n):
    y = yinzi(i)  # 求出每一个比n小的数的因子
    jiaoji = [j for j in y0 if j in y] # 求两个因子集的交集
    if jiaoji == [1]:   # 如果交集只有1,则符合条件
        s += 1
print(s)

求出这些数:

def yinzi(n):
    yz = []
    for i in range(1,n+1):
        if n % i == 0:
            yz.append(i)
    return (yz)
n = 12
y0 = yinzi(n) # 求出n的所有因子
s = 0
f = []
for i in range(1,n):
    y = yinzi(i)  # 求出每一个比n小的数的因子
    jiaoji = [j for j in y0 if j in y] # 求两个因子集的交集
    if jiaoji == [1]:   # 如果交集只有1,则符合条件
        f.append(y)
m= []
for i in range(len(f)):
    for b in f[i]:
        if b not in m:
            m.append(b)
print(m)

相关文章

  • Python挑战100题(37~40)

    37、回文数 Ⅰ 题目:若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就...

  • Python挑战100题(31~33)

    31、取石子问题 题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法...

  • Python挑战100题(34~36)

    34、汉诺塔 题目:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝...

  • Python挑战100题(21~26)

    21、山峰的个数 题目:十一假期,小P出去爬山,爬山的过程中每隔10米他都会记录当前点的海拔高度(以一个浮点数表示...

  • Python挑战100题(27~30)

    27、分拆素数和 题目:把一个偶数拆成两个不同素数的和,有几种拆法呢?现在来考虑考虑这个问题,给你一个不超过100...

  • Python挑战100题(14~20)

    14、信息加密 题目:给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中...

  • Python挑战100题(11~13)

    11、人民币打印金额 题目:银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完...

  • Python挑战100题(1~10)

    1、字符串逆序 题目:给你一个字符串 a, 请你输出逆序之后的a。例如:a=‘xydz’则输出:zdyx答:最简单...

  • 「叶子姑娘呀自律挑战100天」Day37——2019.02.19

    「叶子姑娘呀自律挑战100天」Day37 ——19.02.19 【运动,Day3...

  • 37/100天挑战

    今天开始使用萌姐的赢手册,虽然萌姐的很多理论我觉得有问题,不过她确实是一位创造力很强的女性,值得我学习。 确定了2...

网友评论

      本文标题:Python挑战100题(37~40)

      本文链接:https://www.haomeiwen.com/subject/gppusctx.html