我是编程新手.pls 建议我的程序中的其他问题,这将提高我的编程技能
灭霸排序是一种超级反派排序算法,其工作原理如下:如果数组未排序,请打响指*删除项目的第一部分或后半部分,然后重复该过程。
给定一个输入数组,您可以使用 Thanos 排序从中获得的最长排序数组的大小是多少?
*需要无限手套。
输入 输入的第一行包含一个数字 n (1≤n≤16( — 数组的大小。n 保证为 2 的幂。
输入的第二行包含 n 个空格分隔的整数 ai (1≤ai≤100( — 数组的元素。
输出 返回您可以使用 Thanos 排序获得的排序数组的最大长度。数组的元素必须按非降序排序。
类型错误:"<"在带有注释错误的行上的"无类型"和"无类型"实例之间不受支持
def find():
a = int(input())
if a%2==0 and a<=16 and a>=1:
x = input()
l = x.split()
p= lcheck(l)
r = rcheck(l)
if p < r: # error
return r
else:
return p
else:
print("enter the array length correctly")
find()
def lcheck(l):
n = len(l)
m= sorted(l)
if l==m:
return len(l)
else:
n=n//2
l=l[:n]
if len(l)>1:
lcheck(l)
else:
return 1
def rcheck(l):
n = len(l)
m= sorted(l)
if l==m:
return len(l)
else:
n=n//2
l=l[n+1:]
if len(l)>1:
rcheck(l)
else:
return 1
def splitint(x):
l = x.split()
l = list(map(int,l))
return l
find()
类型错误回溯(上次调用的最近一次( 在 42 l = list(map(int,l(( 43 返回 l ---> 44 查找((
<ipython-input-15-4486e758ce8e> in find()
6 p= lcheck(l)
7 r = rcheck(l)
----> 8 if p < r: # error
9 return r
10 else:
TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'
您没有返回递归 lcheck 和 rcheck 调用的结果(没有返回 ->得到 None(,请将其更改为类似以下内容:
if len(l)>1:
return lcheck(l)
else:
return 1
更多提示:
- lcheck 和 rcheck 共享它们的大部分代码,这是不可取 的
- 您可以使用最大(P,R(
- 使用描述性变量名称,而不仅仅是单个字母(有时很好(
您的代码将无法通过以下测试用例:
16
78 16 40 904 13 99 19 41 47 50 68 71 79 96 76
以下是您可能想尝试的工作代码:
def lcheck(a):
if a == sorted(a):
return len(a)
else:
new_a = a[:len(a)//2]
if len(new_a) > 1:
if lcheck(new_a) >= rcheck(new_a):
return lcheck(new_a)
else:
return rcheck(new_a)
else:
return 1
def rcheck(a):
if a == sorted(a):
return len(a)
else:
new_a = a[len(a)//2:]
if len(new_a) > 1:
if lcheck(new_a) >= rcheck(new_a):
return lcheck(new_a)
else:
return rcheck(new_a)
else:
return 1
if __name__=="__main__":
n = int(input())
a = list(map(int, input().split()))
if lcheck(a) >= rcheck(a):
print(lcheck(a))
else:
print(rcheck(a))