# 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))
明日继续