草稿箱,无用且不完整,请忽略5

111

'''#111,输入一个字符串,输出他的最长回文子串,要求仅有单重循环完成(manacher	算法)
'''
s=input("请输入字符串:")
s='#'+'#'.join(s)+'#'
radis = [0] * len(s) #初始化回文半径
maxlen, pos, max_right = 0, 0, 0
for i in range(len(s)):
    if i<max_right :
        radis[i]=min(max_right - i, radis[pos * 2 - i])#
    else:
        radis[i]=1
    while i - radis[i] >= 0 and i + radis[i] < len(s) and s[i - radis[i]] == s [i + radis[i]]:#左右不超且满足对称相等
        radis[i] += 1
    if i - 1 + radis[i] > max_right:#如果满足扩大半径的条件
        max_right = i - 1 + radis[i]#更新最右侧的位置
        pos = i#更新指针中心位置
    maxlen=max(maxlen,radis[i])
print (maxlen-1)



135

'''135,递归求最大公约数
输入两个整数a和b,请你编写一个函数,gcd(a, b), 计算并输出a和b的最大公约数。
输入
共一行,包含两个整数a和b。
输出
共一行,包含一个整数,表示a和b的最大公约数。
样例输入
12 16
样例输出
4
'''
def gcd(a,b):
    if a%b==0:
        return b
    else: return gcd(b,a%b)
   
a,b=map(int,input("请输入a,b(a>b):").split())
print (gcd(a,b))


#136

'''136,跳台阶
一个楼梯共有n级台阶,每次可以走一级或者两级,问从第0级台阶走到第n级台阶一共有多少种方案。
输入
共一行,包含一个整数n。
输出
共一行,包含一个整数,表示方案数。
样例输入
5
样例输出
8
'''
def t(n):
    if n==1:
        return 1
    elif n==2:
        return 2
    elif n>2:
        return t(n-1)+t(n-2)
n=int(input("请输入n:"))
print(t(n))

#137

'''137,走方格
给定一个n*m的方格阵,沿着方格的边线走,从左上角(0,0)开始,
每次只能往右或者往下走一个单位距离,问走到右下角(n,m)一共有多少种不同的走法。
输入
共一行,包含两个整数n和m。
输出
共一行,包含一个整数,表示走法数量。
样例输入
2 3
样例输出
10
'''
def z(n,m):
    if n==0 or m==0:
        return 1
    else:
        return z(n-1,m)+z(n,m-1)
n,m=map(int,input("请输入n,m:").split())
print(z(n,m))

#138

'''138,列表翻转
给定一个长度为n的列表a和一个整数size,请你编写一个函数,reverse(size),实现将列表a中的前size个数翻转。
输出翻转后的列表a。
输入
第一行包含两个整数n和size。 第二行包含n个整数,表示列表a。
输出
共一行,包含n个整数,表示翻转后的列表a。
样例输入
5 3 
1 2 3 4 5
样例输出
3 2 1 4 5
'''
def reverse(lst):
    if len(lst) == 0:
        return ([])
    else:
        return (reverse(lst[1:]) + [lst[0]] )
print(reverse([1,2,3]))

#139

'''139,不开列表递归解决倒序问题
输入若干个数,读到0为止,将读到的数据倒序输出。
要求:0不输出,且不能开列表。
'''
def reverse2(s):
    if s=="":
        return s
    else:
        return reverse2(s[1:])+s[0]
#print(reverse2('abc'))

s=input("请输入:")
s2=''
i=0
while s[i]!='0':
    i+=1
s2=s[:i]
print(reverse2(s2))

#140

'''140,输入N、M,再输入N个整数形成一个保证有序的列表,问M在这个列表中有没有,
如果有输出YES,如果没有输出NO
输入
同行输入N、M,以空格分隔,接下来N行输入N个整数
输出
“yes”或“no”
样例输入
5 3
1 3 8 11 18
样例输出
yes
递归实现'''

def find(l,b):
    start=0
    end=len(l)-1
    mid=(start+end)//2
    if start==end-1:
        return 'no'
    else:
        if l[mid]==b:
            return 'yes'
        elif l[mid]>b:
            return find(l[start:mid+1],b)
        elif l[mid]<b:
            return find(l[mid:end+1],b)
N,M=map(int,input("请输入N,M:").split())
l=[]
for i in range(N):
    l.append(int(input()))
print (find(l,M))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值