例如:num=[1,1,0,0,1,1,1,0,1,1,0,0]。数字0和1分别表示红玫瑰和白玫瑰。第1次挑出的花的编号为:0、2、4、7、8、10。当编号为7(值为0)的花被挑出后,左右两边可以合并为一个块。则第2次挑出的花的编号为:1、3、5、11。
小明同学编写了一个 Python 程序,来模拟这一过程。程序输出每次挑选的花的编号。程序运行界面如图所示。(1)若花的排列为[1,1,1,0,0,1,0,0],挑
(2)Python程序如下,其中que用于存放每一块的左右端点及该块的值,例如[1,3,0],表示该块从编号1至3,每个值为0。完善代码
num=[1,1,0,0,1,1,1,0,1,1,0,0]
que=[[0]*3 for i in range(10)]
tmp=[[0]*3 for i in range(10)]
tail=0
used=[0]*100 #标记是否已被挑出
print("花的摆放:",num)
#将花按颜色进行分块
num.append(2) #向列表num中添加一个元素2
l=r=0 #标记每一块的左右端点
for i in range(1,len(num)):
if num[i]!=num[i-1]:
que[tail]=[l,r,num[i-1]]
tail+=1
else:
r=i
while tail>0:
for i in range(0,tail): #输出结果
x=que[i][0]
if used[x]==0:
print(que[i][0],end=" ")
used[x]=1
if i==tail-1:
print() #如果是最后一个换行
k=0 #去掉挑完的
for i in range(0,tail):
if que[i][0]>que[i][1]: #当前块取完了
continue
else: #放入临时数组
if k==0:
tmp[k]=que[i]
k+=1
else: #看能否合并
if que[i][2]==tmp[k-1][2]:
else:
tmp[k]=que[i]
k+=1
for i in range(k): #将 tmp 再赋值给 que
que[i]=tmp[i]
tail=k
同类型试题
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