Python挑战100题(37~40)

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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,333评论 0 2
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,335评论 1 42
  • 1、用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。 2、用C语言实现函数void ...
    希崽家的小哲阅读 6,253评论 0 12
  • 标签(空格分隔): 算法 C++ 笔试 第三题:描述小王最近在开发一种新的游戏引擎,但是最近遇到了性能瓶颈。于是他...
    认真学计算机阅读 1,909评论 0 8
  • 1.深度阅读有那三个步骤? 深度阅读分为三个步骤“练兵场”。“练”指的是寻找联系,“兵”指的是发现兵山,“场”指的...
    22a91620a984阅读 111评论 0 0