python-面试题2

# 11.给两个数a,b计算他们发分别是那两个数的最小公倍数和最大公约数,输出这两个数,小的在前,大的在后,多组解输出它们之和最小的那组

def task11(num_list: list):
    a = max(num_list)  # a 最小公倍数
    b = min(num_list)  # b 最大公约数
    # 思路; 两数的最小公倍数就是两数的乘积除以他们的最大公约数 即:(x * y)/ b = a ==> a*b = x * y
    # a,b的积知道,剩下的就是因数分解
    # x或y必定有一个小于或等于int(根号(a*b))所以
    tmp = a * b
    import math
    # 如果sqrt(tmp)为整数,则直接输出结果,这俩数相加必定最小
    if math.sqrt(tmp) % 1 == 0:
        return math.sqrt(tmp), math.sqrt(tmp)
    # 如果不是则进行循环判断
    listx = []
    listy = []
    for i in range(2, int(math.sqrt(tmp))+1):
        if tmp % i == 0:
            listx.append(i)
            listy.append(tmp/i)
    if len(listx) != 0:
        return (listx[-1], listy[-1])
    # 代码有点问题,没有对输入值进行判断,程序能输出结果的前提是输入值确实是某两个数的最小公倍数和最大公约数

# print(task11([12, 2]))


# 12.给你两个正整数a,b,输出他们公约数的个数。
def task12(a: int, b: int):
    tmp = min(a, b)
    n = 0
    for i in range(1, tmp+1):
        if a % i == 0 and b % i == 0:
            n += 1
    return n


# print(task12(100, 20))
# 13.给一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串,存在输出YES,否则NO
def task13(a: str, b: int):
    if b <= 1:
        return 'YES'
    for i in range(len(a)-b+1):
        tmp = a[i: b+i]
        if tmp == tmp[::-1]:
            return 'YES'
    return 'NO'


# print(task13('abcdefg', 2))
# print(task13('1abcba1aa', 3))

# 14.问题:抓不住爱情的我,总是眼铮铮看它溜走......现在来练习一下发现爱的能力,给你一个字符串a,如果其中包含”LOVE“(love不区分大小写)则输出LOVE,否则输出SINGLE。
def task14(a: str):
    a = a.upper()
    if 'LOVE' in a:
        return 'YES'
    return 'NO'


# print(task14('ILove@Qi'))
# print(task14('QiHateMe'))


# 15.问题:给你个小写英文字符串a和一个非负数b(0 <= b < 26),將a中的每个小写字符替换成字母表中比它大b的字母。这里將字母表的z和a相连,如果超出了z就回到了a。
def task15(a: str, b:int):
    # 在ASCII码中小写字母在97-123中间
    tmp = ''
    for i in a:
        idx_a = ord(i)
        idx_new = 0
        if idx_a+b > 123:
            idx_new = 97 + idx_a + b - 123
        else:
            idx_new = idx_a + b
        tmp += chr(idx_new)
    return tmp


# print(task15('hknudph', 1))

明日继续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值