①整队后按身高每行从左到右升序
②整队时,可以让学生离开使得该行按身高升序,但不能让学生交换位置
③每行在符合要求的情况下,保持人数最多
④最后根据各个行的人数,寻找值i,人数大于等于i的行的数量大于等于i,i尽量大,组成一个i*i的最大方阵。
小明编写程序,按要求确定每行的最长长度,再寻找值i,并输出组成的最大方阵i*i的大小。方阵的身高数据已按每行存储在和代码文件同一个位置的“身高.csv”文件中,如图a所示数据,运行后结果如图b。

(1)若数据如图c所示,程序运行后输出:组成的最大方阵大小为
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
(3)加框处代码有误,请改正。
def readfile(filename):#读取文件
f=open (filename,encoding='utf-8')
line=f.readline();t=[]
while line:
’’’代码l将line以逗号为分隔符分割,并将里面的每个元素转换为整型代码2将a转换为列表,例如1ine="156,167,182”,运行上述代码1,2后存入a的为[156,167,182]’’’
a=map(int,line.split(",")) #代码1
a=list(a) #代码2
t.append (a); line=f. readline()
return t
def max_cd(i,b,k): #计算k中到索引i处为止的最长升序序列的元素个数并返回
for j in range(i-l.-1,-1):#枚举索引i的元素放在索引 0-i-1哪个元素之后最优
if:
b[i]=b[j]+1
return b[i]
t= ①
c=[]
for k in t:
b={} #b中键为索引,值表示在列表k中到该索引为止最长升序序列的元素个数
Max=0
for i in range(len(k)):#b中键值对赋初值
②
for i in range(len(k)):
b[i]=max_cd(i, b,k)
if b[i]>Max:
Max=b[i]
c. append (Max)
for i in range (len(t),0,-1):
count=0
for j in c:
if j>=i:
count+=1
if count>=i:
③
print("组成的最大方阵大小为”,i,"*",i)

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

