编写程序模拟游戏的实现过程,珠子的颜色用数字表示,为方便处理,在珠串最前面加入一颗不可消除的珠子,颜色值为-1。

请回答下列问题:
(1)若珠串为-1,2,2,3,3,2,2,将颜色为3的珠子发射到颜色为2和3的珠子之间,可获得积分为
(2)定义如下insert(t,pos)函数,函数功能是将颜色为t的珠子,插入到当前珠串中的第pos颗珠子
def insert(t,pos): #将颜色为t的珠子,插入到当前珠串第pos颗珠子的后面
p=head
while pos>1:
pos-=1
p=link[p][1]
link.append(
link[p][1]=len(link)-1
(3)定义如下fun()函数,函数功能是:查找珠串里最早出现的可消除珠串,函数返回ret,ret由该珠串起始珠子的前一颗珠子位置和该珠串的连续长度组成。
def fun():
p=head;st=head
pre=p
num=0
lastcolor=-1
ret=[-1,0]
while p!=-1:
t=link[p][0]
if t!=lastcolor:
if num>=3:
ret=[st,num]
break
lastcolor=t
st=pre
num=1
else:
num+=1
pre=p
p-link[p][1]

return ret
若将函数中加框处代码删除,会导致某些情况下无法得到符合函数功能的结果。调用fun()函数,下列4组数据中能测试出这一问题的是
A. head=4 link=[[2,3],[1,0],[1,1],[2,-1],[-1,2]] | B. head=0 link=[[-1,1],[2,3],[2,4],[2,2],[1,-1]] |
C. head=1 link=[[2,-1],[-1,3],[2,0],[1,4],[2,2]] | D. head=4 link=[[2,-1],[1,0],[1,1],[1,2],[-1,3]] |
def clear(g) :#根据fun函数的返回值对珠串进行消除,并统计获得本次消除的积分
p=g[0]
q=p
length=g[1]
ret=
while length>=0:
q=link[q][1]
length-=1
link[p][1]=q
return ret
def traverl():
#将轨道中珠串按序输出,代码略
head=7
link=[[1,3],[1,8],[2,1],[5,5],[2,2],[4,4],[3,0],[-1,6],[2,9],[2,-1]]
print("现轨道的珠串为:")
traverl()
points=0
que=[1,1,4,4] #保存炮台中待发射珠子的颜色
qhead=0
qtail=4
while qhead!=qtail:
print("当前珠子的颜色为:",que[ghead])
s-int(input("请输入当前发射位置:"))
insert(que[qhead],s)
qhead+=1
g=fun()
while g!=[-1,0]:
points+=clear(g)
print("最终得分为",points)
print("轨道中剩余的珠串为:")
traverl()

同类型试题

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

